Maison >développement back-end >tutoriel php >Conseils de programmation PHP pour prévenir les attaques par injection SQL
Conseils de programmation PHP pour prévenir les attaques par injection SQL
Introduction :
L'injection SQL est une méthode d'attaque d'application Web courante. Les attaquants obtiennent un accès ou une exécution illégale à la base de données en insérant du code SQL malveillant dans les données saisies par l'utilisateur pour des opérations malveillantes. . Pour protéger nos applications contre les attaques par injection SQL, nous devons adopter certaines techniques de programmation pour filtrer, échapper et valider les données saisies par l'utilisateur. Cet article abordera plusieurs techniques de programmation PHP courantes pour nous aider à prévenir les attaques par injection SQL.
$mysqli = new mysqli("localhost", "username", "password", "database"); if($mysqli->connect_error) { die("连接数据库失败: " . $mysqli->connect_error); } $stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->bind_param("ss", $username, $password); $username = $_POST['username']; $password = $_POST['password']; $stmt->execute(); $result = $stmt->get_result(); while($row = $result->fetch_assoc()) { // 处理结果集 } $stmt->close();
$dsn = 'mysql:host=localhost;dbname=database'; $username = 'username'; $password = 'password'; try { $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { die("连接数据库失败:" . $e->getMessage()); } $stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password"); $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); $username = $_POST['username']; $password = $_POST['password']; $stmt->execute(); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach($result as $row) { // 处理结果集 } $stmt->closeCursor();
$username = $_POST['username']; $password = $_POST['password']; if(!empty($username) && !empty($password)) { // 验证用户名和密码是否符合要求,如长度、字符等 // ... // 过滤特殊字符 $username = filter_var($username, FILTER_SANITIZE_STRING); $password = filter_var($password, FILTER_SANITIZE_STRING); // 执行SQL查询 // ... } else { die("用户名和密码不能为空"); }
Résumé :
Pour éviter les attaques par injection SQL, nous devons prendre des mesures pour filtrer, échapper et valider les données saisies par l'utilisateur. L'utilisation d'instructions préparées et de requêtes paramétrées peut empêcher efficacement les attaques par injection SQL. Dans le même temps, la validation et le filtrage des entrées sont également des mesures défensives importantes. En utilisant ces conseils de programmation PHP, nous pouvons améliorer la sécurité de nos applications et protéger les informations des utilisateurs et la sécurité des bases de données.
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!