Sécurité des applications PHP : 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 PHP : top 10 des vulnérabilités pour débutants

\n

PHP reste l'un des langages les plus populaires pour le développement web, mais sa flexibilité se transforme souvent en vulnérabilités si les règles de sécurité de base ne sont pas respectées. Selon l'OWASP, la plupart des piratages proviennent de 10 erreurs typiques commises par les développeurs débutants. Dans cet article, nous analyserons chaque vulnérabilité avec des exemples de code réels et montrerons comment protéger votre application.

\n\n

1. Injections SQL (SQL Injection)

\n

L'attaque la plus courante. L'attaquant injecte du code SQL malveillant via une saisie utilisateur.

\n

Code vulnérable :

\n
<?php\n$id = $_GET['id'];\n$query = "SELECT * FROM users WHERE id = $id";\n$result = mysqli_query($conn, $query);\n?>
\n

Protection : Utilisez des requêtes préparées (prepared statements) :

\n
<?php\n$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");\n$stmt->bind_param("i", $_GET['id']);\n$stmt->execute();\n$result = $stmt->get_result();\n?>
\n\n

2. XSS (Cross-Site Scripting)

\n

Injection de code JavaScript dans une page via des données non vérifiées.

\n

Code vulnérable :

\n
<?php\necho "Bonjour, " . $_GET['name'];\n?>
\n

Protection : Échappez la sortie avec htmlspecialchars() :

\n
<?php\necho "Bonjour, " . htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');\n?>
\n\n

3. CSRF (Cross-Site Request Forgery)

\n

Attaque où l'utilisateur effectue des actions indésirables en son nom.

\n

Code vulnérable :

\n
<form action="/delete.php" method="POST">\n    <input type="submit" value="Supprimer le compte">\n</form>
\n

Protection : Ajoutez un jeton CSRF :

\n
<?php\nsession_start();\n$_SESSION['csrf_token'] = bin2hex(random_bytes(32));\n?>\n<form action="/delete.php" method="POST">\n    <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">\n    <input type="submit" value="Supprimer le compte">\n</form>
\n\n

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

\n

Stockage des mots de passe en clair ou avec des hachages obsolètes (MD5, SHA1).

\n

Code vulnérable :

\n
<?php\n$password = md5($_POST['password']);\n// ou\n$password = sha1($_POST['password']);\n?>
\n

Protection : Utilisez password_hash() et password_verify() :

\n
<?php\n$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);\n// Vérification :\nif (password_verify($input_password, $hash)) {\n    echo "Mot de passe correct";\n}\n?>
\n\n

5. Gestion non sécurisée des fichiers (Inclusion de fichiers locale/distant)

\n

Inclusion de fichiers via une saisie utilisateur sans vérification.

\n

Code vulnérable :

\n
<?php\ninclude($_GET['page'] . '.php');\n?>
\n

Protection : Utilisez une liste blanche de fichiers autorisés :

\n
<?php\n$allowed_pages = ['home', 'about', 'contact'];\n$page = $_GET['page'] ?? 'home';\nif (in_array($page, $allowed_pages)) {\n    include($page . '.php');\n} else {\n    include('404.php');\n}\n?>
\n\n

6. Configuration incorrecte des sessions

\n

Utilisation d'identifiants de session prévisibles ou absence de régénération.

\n

Code vulnérable :

\n
<?php\nsession_start();\n$_SESSION['user_id'] = $user_id;\n// La session n'est pas régénérée après la connexion\n?>
\n

Protection :

\n
<?php\nsession_start();\nsession_regenerate_id(true); // Régénération de l'ID après la connexion\n$_SESSION['user_id'] = $user_id;\n?>
\n\n

7. Validation insuffisante des entrées

\n

Confiance en toutes les données provenant de l'utilisateur.

\n

U

Blogs

Book Recommendations