Sécurité des applications C# : top 10 des vulnérabilités pour débutants

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 pour débutants

La sécurité des logiciels est l'une des tâches clés du développeur. Même une petite application en C# peut devenir une cible pour les attaquants si les vulnérabilités courantes ne sont pas prises en compte. Dans cet article, nous allons passer en revue les 10 vulnérabilités les plus dangereuses de C# (.NET) auxquelles les développeurs débutants sont confrontés. Vous apprendrez comment elles surviennent, comment elles sont exploitées et, surtout, comment s'en protéger.



1. Injections SQL (SQL Injection)

C'est l'une des vulnérabilités les plus anciennes et les plus dangereuses. Elle se produit lorsque la saisie utilisateur est directement concaténée dans une requête SQL.

Exemple de code vulnérable :

string userName = Request.QueryString["user"];string query = "SELECT * FROM Users WHERE Name = '" + userName + "'";SqlCommand cmd = new SqlCommand(query, connection);

Comment l'attaque se produit : L'attaquant peut transmettre au paramètre user la valeur ' OR 1=1 --, ce qui renverra tous les enregistrements de la table.

Protection : Utilisez des requêtes paramétrées.

string query = "SELECT * FROM Users WHERE Name = @userName";SqlCommand cmd = new SqlCommand(query, connection);cmd.Parameters.AddWithValue("@userName", userName);


2. Scripting inter-site (XSS)

La vulnérabilité XSS permet d'injecter du code JavaScript malveillant dans une page affichée à d'autres utilisateurs.

Exemple de code vulnérable (ASP.NET WebForms) :

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

Protection : Encodez toujours la sortie. Utilisez HttpUtility.HtmlEncode() ou la syntaxe Razor (@), qui encode automatiquement les données.

Response.Write("<div>" + HttpUtility.HtmlEncode(comment) + "</div>");


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

Lors de la désérialisation de données provenant d'une source non fiable (par exemple, d'une requête ou d'un fichier), un attaquant peut exécuter du code arbitraire sur le serveur.

Exemple de code vulnérable (BinaryFormatter) :

BinaryFormatter formatter = new BinaryFormatter();using (var stream = new MemoryStream(data)){    var obj = formatter.Deserialize(stream); // DANGEREUX !}

Protection : Utilisez des sérialiseurs modernes (JSON, XML avec restrictions), vérifiez les types et ne désérialisez jamais les données provenant de clients non fiables. Évitez BinaryFormatter, SoapFormatter et LosFormatter.



4. Faiblesses d'authentification et de gestion des sessions

Cela inclut les mots de passe faibles, l'absence de limitation du nombre de tentatives de connexion, les cookies de session non sécurisés.

Exemple de vulnérabilité : Cookie de session sans les indicateurs HttpOnly et Secure.

Protection :

  • Utilisez Identity ou ASP.NET Core Identity.
  • Configurez les cookies : HttpOnly, Secure, SameSite=Strict.
  • Activez la limitation du nombre de tentatives de connexion (Account Lockout).
  • Utilisez HTTPS.
services.ConfigureApplicationCookie(options =>{    options.Cookie.HttpOnly = true;    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;    options.Cookie.SameSite = SameSiteMode.Strict;});


5. Contrefaçon de requête inter-site (CSRF)

Attaque par laquelle un attaquant force un utilisateur authentifié à effectuer une action non souhaitée sur le site (par exemple, transférer de l'argent).

Protection : Utilisez des jetons anti-falsification (Anti-Forgery Tokens). Dans ASP.NET Core, cela se fait automatiquement lors de l'utilisation de la balise <form> avec asp-antiforgery

Blogs

Book Recommendations