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

\n\n

Développer des applications sécurisées en C# n'est pas seulement une tendance, mais une nécessité. Chaque jour, des milliers de vulnérabilités sont découvertes dans le monde, et votre application pourrait devenir la prochaine cible. Dans cet article, nous allons analyser les 10 vulnérabilités les plus courantes dans les applications C# (.NET) rencontrées par les développeurs débutants. Vous apprendrez à les détecter et, surtout, à protéger votre code.

\n\n

1. Injections SQL (SQL Injection)

\n\n

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

\n\n

Code vulnérable :

\n
string userName = Request["username"];\nstring query = "SELECT * FROM Users WHERE Name = '" + userName + "'";\nSqlCommand cmd = new SqlCommand(query, connection);
\n\n

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

\n
string userName = Request["username"];\nstring query = "SELECT * FROM Users WHERE Name = @name";\nSqlCommand cmd = new SqlCommand(query, connection);\ncmd.Parameters.AddWithValue("@name", userName);
\n\n

2. Scripting inter-sites (XSS)

\n\n

Les attaques XSS permettent à un attaquant d'injecter un script malveillant sur une page affichée à d'autres utilisateurs.

\n\n

Code vulnérable :

\n
string comment = Request["comment"];\nResponse.Write("<div>" + comment + "</div>");
\n\n

Protection : Encodez toujours la sortie. Utilisez HttpUtility.HtmlEncode() :

\n
string comment = Request["comment"];\nResponse.Write("<div>" + HttpUtility.HtmlEncode(comment) + "</div>");
\n\n

3. Absence d'authentification et d'autorisation

\n\n

De nombreux débutants oublient de vérifier les droits d'accès aux ressources. Par exemple, un utilisateur peut accéder au profil d'un autre en modifiant simplement l'ID dans l'URL.

\n\n

Code vulnérable :

\n
public IActionResult Profile(int userId)\n{\n    var user = _context.Users.Find(userId);\n    return View(user);\n}
\n\n

Protection : Vérifiez toujours que l'utilisateur actuel a le droit d'accéder à la ressource demandée :

\n
public IActionResult Profile(int userId)\n{\n    var currentUserId = User.FindFirst(ClaimTypes.NameIdentifier).Value;\n    if (userId != currentUserId) return Forbid();\n    var user = _context.Users.Find(userId);\n    return View(user);\n}
\n\n

4. Fuite de données confidentielles via les exceptions

\n\n

Les développeurs affichent souvent des informations d'erreur complètes, y compris la pile d'appels et les chaînes de connexion.

\n\n

Code vulnérable :

\n
try\n{\n    // code\n}\ncatch (Exception ex)\n{\n    Response.Write(ex.ToString()); // DANGEREUX !\n}
\n\n

Protection : En production, utilisez des messages d'erreur génériques et enregistrez les détails dans un endroit sécurisé :

\n
try\n{\n    // code\n}\ncatch (Exception ex)\n{\n    _logger.LogError(ex, "Erreur lors du traitement de la requête");\n    return StatusCode(500, "Une erreur interne du serveur s'est produite");\n}
\n\n

5. Stockage non sécurisé des mots de passe

\n\n

Stocker les mots de passe en clair ou avec des hachages faibles (MD5, SHA1) est une erreur grave.

\n\n

Code vulnérable :

\n
string passwordHash = MD5.Hash(password); // INTERDIT !
\n\n

Protection : Utilisez des algorithmes de hachage modernes avec sel, par exemple BCrypt ou ASP.NET Core Identity :

\n
var passwordHasher = new PasswordHasher<IdentityUser>();\nstring passwordHash = passwordHasher.HashPassword(user, password);
\n\n

6. Protection insuffisante contre CSRF (Cross-Site Request Forgery)

\n\n

Attaque où un attaquant force le navigateur de la victime à effectuer une action non désirée sur un autre site, où

Blogs

Book Recommendations