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

WBOY
WBOYoriginal
2023-07-09 21:18:121279parcourir

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.

  1. Utilisez des instructions préparées
    Les instructions préparées sont un outil puissant en PHP pour empêcher l'injection SQL. Il garantit que les données saisies sont correctement échappées et traitées comme des données et ne font pas partie du code SQL. Voici un exemple d'utilisation d'instructions préparées :
$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();
  1. Utilisation de requêtes paramétrées
    Semblables aux instructions préparées, les requêtes paramétrées peuvent également empêcher les attaques par injection SQL. Nous pouvons utiliser la bibliothèque PDO pour effectuer des requêtes paramétrées. Voici un exemple d'utilisation de requêtes paramétrées :
$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();
  1. Validation et filtrage des entrées
    En plus d'utiliser des instructions préparées et des requêtes paramétrées, nous devons également effectuer la validation et le filtrage des entrées utilisateur. Cela nous aide à détecter et à bloquer les entrées malveillantes. Voici un exemple de validation et de filtrage des entrées utilisateur :
$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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn