Sécurité des applications C# : top 10 des vulnérabilités en pratique

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Sécurité des applications C# : top 10 des vulnérabilités en pratique



La sécurité est l'un des aspects les plus importants du développement d'applications modernes en C# et .NET. Même un petit bug négligé peut entraîner une fuite de données ou une compromission totale du système. Dans cet article, nous allons passer en revue les 10 vulnérabilités les plus courantes rencontrées par les développeurs C# et montrer comment les éviter en pratique.



1. Injections SQL (SQL Injection)

La vulnérabilité la plus ancienne et la plus dangereuse. Elle survient lorsque l'entrée utilisateur est directement insérée dans une requête SQL.



Code vulnérable :

string login = txtLogin.Text;string query = "SELECT * FROM Users WHERE Login = '" + login + "'";SqlCommand cmd = new SqlCommand(query, connection);


Code sécurisé (requêtes paramétrées) :

string login = txtLogin.Text;string query = "SELECT * FROM Users WHERE Login = @login";SqlCommand cmd = new SqlCommand(query, connection);cmd.Parameters.AddWithValue("@login", login);


Protection supplémentaire : utilisez un ORM (Entity Framework) — il paramètre automatiquement les requêtes.



2. Scripting intersite (XSS)

Un attaquant injecte du code JavaScript malveillant dans une page via l'entrée utilisateur.



Code vulnérable :

string comment = Request.Form["comment"];Response.Write("<div>" + comment + "</div>");


Code sécurisé (encodage de la sortie) :

string comment = Request.Form["comment"];Response.Write("<div>" + HttpUtility.HtmlEncode(comment) + "</div>");


Dans ASP.NET Core, utilisez @Html.Encode() ou la syntaxe Razor avec encodage automatique.



3. Falsification de requête intersite (CSRF)

Attaque où l'attaquant force un utilisateur à effectuer une action non désirée sur un site où il est authentifié.



Code vulnérable (absence de protection) :

[HttpPost]public IActionResult DeleteAccount(int userId){    // Suppression du compte sans vérification de jeton    return Ok();}


Protection avec des jetons antifalsification dans ASP.NET Core :

[HttpPost][ValidateAntiForgeryToken]public IActionResult DeleteAccount(int userId){    // Suppression sécurisée    return Ok();}


Sur le client, le jeton est transmis via un champ de formulaire caché ou un en-tête.



4. Désérialisation non sécurisée

Lors de la désérialisation de données provenant d'une source non fiable, un attaquant peut exécuter du code arbitraire.



Code vulnérable (BinaryFormatter) :

BinaryFormatter formatter = new BinaryFormatter();using (FileStream fs = new FileStream("data.bin", FileMode.Open)){    var obj = formatter.Deserialize(fs); // Dangereux !}


Alternatives sécurisées :

  • Utilisez System.Text.Json ou Newtonsoft.Json avec restriction des types.
  • Activez TypeNameHandling.None.
  • Évitez BinaryFormatter, SoapFormatter et LosFormatter.


5. Faiblesses d'authentification et de gestion des sessions

Authentification faible, stockage des mots de passe en clair, jetons de session prévisibles.



Erreurs :

  • Stockage du mot de passe en clair : User.Password = txtPassword.Text;
  • Implémentation personnalisée du hachage sans sel.
  • Utilisation de Guid.NewGuid() pour générer des jetons — trop prévisible.


Approche correcte :

  • Utilisez ASP.NET Core Identity — une solution intégrée.
  • Hachez les mots de passe avec BCrypt.Net ou

Blogs

Book Recommendations