Maison >développement back-end >tutoriel php >Pratiques de sécurité essentielles pour protéger votre application PHP contre les vulnérabilités courantes
Sécuriser votre application PHP implique de la protéger contre les vulnérabilités courantes telles que l'injection SQL, les scripts intersites (XSS), la falsification de requêtes intersites (CSRF), le détournement de session et l'inclusion de fichiers. attaques. Voici un exemple pratique avec une description partie par partie pour vous aider à comprendre comment sécuriser votre application PHP.
L'injection SQL se produit lorsqu'un attaquant peut injecter des instructions SQL malveillantes dans vos requêtes. Utilisez des instructions préparées avec des requêtes paramétrées pour éviter cela.
Exemple :
<?php // Insecure version $user_id = $_GET['id']; $query = "SELECT * FROM users WHERE id = '$user_id'"; $result = mysqli_query($connection, $query); // Secure version $user_id = $_GET['id']; $stmt = $connection->prepare("SELECT * FROM users WHERE id = ?"); $stmt->bind_param("i", $user_id); // "i" for integer $stmt->execute(); $result = $stmt->get_result(); ?>
Explication :
Le XSS se produit lorsque des attaquants injectent des scripts malveillants dans des pages Web consultées par d'autres utilisateurs. Pour éviter cela, désinfectez et encodez toujours la sortie.
Exemple :
<?php // Insecure version echo "<p>Welcome, " . $_GET['username'] . "</p>"; // Secure version echo "<p>Welcome, " . htmlspecialchars($_GET['username'], ENT_QUOTES, 'UTF-8') . "</p>"; ?>
Explication :
CSRF se produit lorsqu'un attaquant incite un utilisateur à effectuer des actions sur un site à son insu. Protégez-vous contre CSRF en utilisant des jetons.
Exemple :
<?php // Generate CSRF token session_start(); if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } // Add token to form echo '<form method="POST" action="submit.php">'; echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">'; echo '<input type="text" name="data">'; echo '<input type="submit" value="Submit">'; echo '</form>'; ?>
Dans submit.php :
<?php session_start(); if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) { die("CSRF token validation failed."); } // Process form data $data = $_POST['data']; ?>
Explication :
Sécurisez vos sessions pour éviter le détournement de session. Cela inclut la définition de configurations de session strictes et la régénération des identifiants de session.
Exemple :
<?php session_start(); // Regenerate session ID to avoid fixation attacks session_regenerate_id(true); // Configure secure session parameters ini_set('session.cookie_httponly', 1); // Prevent JavaScript access to session cookies ini_set('session.cookie_secure', 1); // Ensure cookies are sent over HTTPS ini_set('session.use_strict_mode', 1); // Prevent accepting uninitialized session IDs // Set session timeout $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time if (time() - $_SESSION['LAST_ACTIVITY'] > 1800) { // 30 minutes timeout session_unset(); session_destroy(); session_start(); } ?>
Explication :
Les téléchargements de fichiers sans restriction peuvent entraîner le téléchargement et l'exécution de fichiers malveillants. Toujours validez les types de fichiers et stockez-les en toute sécurité.
Exemple :
<?php // Insecure version $user_id = $_GET['id']; $query = "SELECT * FROM users WHERE id = '$user_id'"; $result = mysqli_query($connection, $query); // Secure version $user_id = $_GET['id']; $stmt = $connection->prepare("SELECT * FROM users WHERE id = ?"); $stmt->bind_param("i", $user_id); // "i" for integer $stmt->execute(); $result = $stmt->get_result(); ?>
Explication :
Un en-tête CSP peut aider à prévenir les attaques XSS et par injection de données en limitant l'endroit à partir duquel les ressources peuvent être chargées.
Exemple (à ajouter dans le fichier .htaccess ou la configuration du serveur) :
<?php // Insecure version echo "<p>Welcome, " . $_GET['username'] . "</p>"; // Secure version echo "<p>Welcome, " . htmlspecialchars($_GET['username'], ENT_QUOTES, 'UTF-8') . "</p>"; ?>
Explication :
Utilisez la validation et la désinfection des entrées pour empêcher divers types d'injections.
Exemple :
<?php // Generate CSRF token session_start(); if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } // Add token to form echo '<form method="POST" action="submit.php">'; echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">'; echo '<input type="text" name="data">'; echo '<input type="submit" value="Submit">'; echo '</form>'; ?>
Explication :
En implémentant ces méthodes, votre application PHP sera mieux protégée contre les vulnérabilités courantes. Il est important de rester à jour avec les meilleures pratiques et d'appliquer systématiquement des mesures de sécurité à votre code.
Connectez-vous avec moi :@ LinkedIn et consultez mon portfolio.
Veuillez donner une étoile à mes projets GitHub ⭐️
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!