Maison >développement back-end >tutoriel php >PHP implémente une programmation sécurisée : injection SQL et défense
Programmation sécurisée avec PHP : injection SQL et défense
De nos jours, Internet est en plein essor et les sites Web et applications deviennent de plus en plus populaires. Cela s’accompagne de menaces de sécurité croissantes. L’injection SQL est l’une des méthodes d’attaque les plus courantes. Les attaques par injection SQL utilisent des données d'entrée pour modifier ou altérer les commandes SQL, puis accéder, modifier et supprimer le contenu de la base de données principale. Cet article présentera les principes et les mesures défensives des attaques par injection SQL, ainsi que comment implémenter une programmation sécurisée en PHP.
Le principe de l'attaque par injection SQL :
Le principe de l'attaque par injection SQL est très simple : l'attaquant écrase les données d'origine par des données malveillantes, interférant et détruisant ainsi le processus de traitement des données. Étant donné que les requêtes SQL sont généralement construites par un programme basé sur les données saisies par l'utilisateur, un attaquant peut ajouter des caractères spéciaux à l'entrée pour modifier la requête selon les résultats souhaités par l'attaquant.
Ce qui suit est un exemple de code simple :
$user = $_POST['user']; $password = $_POST['password']; //查询用户是否存在 $sql = "SELECT * FROM users WHERE username='$user' AND password='$password'"; $result = mysqli_query($conn, $sql);
Si un attaquant entre le code suivant :
' OR '1'='1
L'instruction de requête SQL construite deviendra :
SELECT * FROM users WHERE username='' OR '1'='1' AND password=''
Cela fera que l'instruction de requête retournera toujours une valeur vraie, permettant au attaquant pour contourner l'authentification, le contenu de la base de données peut être consulté, modifié ou supprimé.
Mesures de défense :
Il existe de nombreuses façons de se défendre contre les attaques par injection SQL. Voici quelques mesures couramment utilisées :
Les instructions préparées sont un moyen efficace de prévenir les attaques par injection SQL. pour remplacer les variables dans l'instruction de requête. Ces espaces réservés sont automatiquement échappés par le programme et les données sont inspectées.
Voici un exemple de code utilisant des instructions préparées :
$user = $_POST['user']; $password = $_POST['password']; //使用预处理语句查询用户是否存在 $stmt = $conn->prepare("SELECT * FROM users WHERE username=? AND password=?"); $stmt->bind_param("ss", $user, $password); $stmt->execute(); $result = $stmt->get_result();
Avant de lire et de manipuler les données saisies par l'utilisateur, elles doivent être filtrées et validées. Vous pouvez utiliser les fonctions intégrées de PHP pour filtrer les entrées de l'utilisateur, telles que htmlspecialchars() ou mysqli_real_escape_string().
Ce qui suit est un exemple de code qui utilise la fonction mysqli_real_escape_string() pour filtrer les entrées de l'utilisateur :
$user = mysqli_real_escape_string($conn, $_POST['user']); $password = mysqli_real_escape_string($conn, $_POST['password']); //查询用户是否存在 $sql = "SELECT * FROM users WHERE username='$user' AND password='$password'"; $result = mysqli_query($conn, $sql);
Réduire les données que l'utilisateur doit saisir peut réduire le risque d'attaques par injection SQL. Vous pouvez utiliser les valeurs par défaut du formulaire, les menus déroulants, les boutons radio, etc. pour réduire la saisie de l'utilisateur, et vous pouvez également limiter la longueur de saisie de l'utilisateur.
Dans les applications pratiques, il est recommandé de ne pas utiliser de fonctions liées à la base de données pour filtrer ou valider les données saisies par l'utilisateur. Parce que ces fonctions peuvent échouer en raison de verrous de base de données ou d’autres problèmes, entraînant des failles de sécurité.
Conclusion :
L'attaque par injection SQL est une méthode d'attaque réseau courante qui peut entraîner de graves conséquences en peu de temps. Cependant, les attaques par injection SQL peuvent être défendues efficacement en utilisant des instructions préparées, en filtrant les entrées utilisateur et en minimisant les entrées utilisateur. Restez en sécurité en ligne en restant vigilant et en mettant constamment à jour vos connaissances.
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!