Maison > Article > développement back-end > Conseils de programmation PHP : comment prévenir les attaques par injection SQL
Conseils de programmation PHP : Comment prévenir les attaques par injection SQL
La sécurité est cruciale lors de l'exécution d'opérations de base de données. Les attaques par injection SQL sont une attaque réseau courante qui exploite la mauvaise gestion par une application des entrées utilisateur, entraînant l'insertion et l'exécution de code SQL malveillant. Pour protéger notre application contre les attaques par injection SQL, nous devons prendre quelques précautions.
Voici un exemple de code simple :
$servername = "localhost"; $username = "your_username"; $password = "your_password"; $dbname = "your_database"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $username = $_POST['username']; $password = $_POST['password']; $stmt = $conn->prepare("SELECT * FROM users WHERE username = :username AND password = :password"); $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); $stmt->execute(); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); // 处理查询结果... } catch (PDOException $e) { // 处理异常... }
En utilisant des requêtes paramétrées, nous traitons les valeurs saisies par l'utilisateur séparément de l'instruction de requête SQL et combinons les variables avec l'instruction de requête via le bindParam méthode Liaison d’espace réservé. De cette façon, même si l’utilisateur insère du code SQL malveillant dans l’entrée, celui-ci ne sera pas exécuté. <code>bindParam
方法将变量与查询语句的占位符绑定。这样即使用户在输入中插入了恶意的SQL代码,它也不会被执行。
filter_var()
、filter_input()
等。下面是一个过滤和验证用户输入的代码示例:
$username = $_POST['username']; $password = $_POST['password']; if (!empty($username) && !empty($password)) { // 过滤和验证用户名和密码 $filteredUsername = filter_var($username, FILTER_SANITIZE_STRING); $filteredPassword = filter_var($password, FILTER_SANITIZE_STRING); // 执行查询操作... } else { // 用户名和密码不能为空 echo "用户名和密码不能为空。"; }
在上面的示例中,我们使用了FILTER_SANITIZE_STRING
filter_var()
, filter_input()
, etc. FILTER_SANITIZE_STRING
pour supprimer tous les caractères illégaux dans la saisie de l'utilisateur. De cette façon, même si l'utilisateur saisit du code SQL malveillant, celui-ci sera automatiquement supprimé ou échappé, protégeant ainsi l'application des attaques par injection SQL. Réduire les autorisations de la base de données
Afin d'améliorer encore la sécurité du système, nous devons limiter les autorisations des utilisateurs de la base de données au minimum. Accordez aux utilisateurs de la base de données uniquement les autorisations dont ils ont besoin pour effectuer les opérations nécessaires, comme autoriser uniquement la lecture et l'écriture dans les tables de données, et accordez des autorisations de niveau supérieur uniquement lorsque cela est nécessaire. 🎜🎜Mettre à jour et entretenir régulièrement les applications et les bases de données🎜La mise à jour et la maintenance régulières des applications et des bases de données sont l'une des mesures importantes pour garantir la sécurité des applications. Mettez à niveau les applications et les bases de données en temps opportun, corrigez les vulnérabilités de sécurité connues et sauvegardez régulièrement les bases de données pour éviter toute perte de données. 🎜🎜🎜Pour résumer, prévenir les attaques par injection SQL est l'une des étapes clés pour garantir la sécurité des applications. En utilisant des requêtes paramétrées, en filtrant et en validant les entrées, en minimisant les autorisations de base de données et en mettant régulièrement à jour et en maintenant les applications et les bases de données, nous pouvons prévenir efficacement les attaques par injection SQL. Dans le même temps, nous devons toujours prêter attention aux dernières menaces et vulnérabilités en matière de sécurité et prendre les mesures appropriées pour y faire face en temps opportun. 🎜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!