Maison >développement back-end >tutoriel php >Comment prévenir les attaques par injection SQL dans le développement PHP

Comment prévenir les attaques par injection SQL dans le développement PHP

WBOY
WBOYoriginal
2023-06-27 20:53:371309parcourir

Comment prévenir les attaques par injection SQL dans le développement PHP

Les attaques par injection SQL font référence à la construction dynamique d'instructions SQL dans des applications Web, puis à l'exécution de ces instructions SQL sur la base de données, permettant aux attaquants d'effectuer des opérations malveillantes ou d'obtenir des données sensibles. Pour cette méthode d'attaque, les développeurs doivent prendre des mesures de protection pour garantir la sécurité des applications Web. Cet article explique comment empêcher les attaques par injection SQL dans le développement PHP.

  1. Liaison de paramètres

En PHP, vous pouvez utiliser la bibliothèque d'extensions PDO ou mysqli pour implémenter la liaison de paramètres et exécuter les instructions SQL et les paramètres d'entrée séparément. Cette méthode peut empêcher les paramètres de contenir des caractères et des instructions d'exception SQL et éviter les attaques internes par injection SQL.

En prenant PDO comme exemple, le code est le suivant :

//准备SQL语句
$sql = "SELECT name, age, email FROM user WHERE id = :id AND age > :age";
$stmt = $pdo->prepare($sql);
 
//绑定参数
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->bindParam(':age', $age, PDO::PARAM_INT);
 
//执行查询语句
$stmt->execute();
  1. String escape

Avant de stocker les données saisies par l'utilisateur dans la base de données, vous devez utiliser la fonction d'échappement pour échapper à la chaîne. En PHP, les fonctions mysql_real_escape_string() et mysqli_real_escape_string() peuvent réaliser une évasion. Cette méthode est une mesure préventive de bas niveau et il est recommandé de l'utiliser conjointement avec d'autres mesures de protection plus sûres.

Exemple de code :

//获取用户输入
$username = $_POST['username'];
$password = $_POST['password'];

//转义字符串
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

//准备SQL,然后查询
$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
mysql_query($sql);
  1. Vérification des entrées

La vérification des entrées fait référence au filtrage et à la validation des paramètres d'entrée pour garantir que l'entrée est légale et conforme au type et au format attendus. Cette approche évite certaines vulnérabilités potentielles d’injection SQL. Par exemple, si le paramètre de la requête est un nombre, vous pouvez utiliser la fonction is_numeric() pour vérifier s'il s'agit d'un nombre. Si le paramètre de la requête est une chaîne, vous pouvez utiliser la fonction ctype_alpha() pour vérifier si elle ne contient que des lettres.

//对用户输入进行检查
if (is_numeric($_GET['id'])) {
    $id = $_GET['id'];
    
    //查询数据库
    $sql = "SELECT * FROM users WHERE id = $id";
    mysql_query($sql);
}
  1. Contrôle des autorisations de base de données

Lors du développement d'applications Web, vous pouvez utiliser des comptes et des autorisations spécifiques pour vous connecter à la base de données. Une attention particulière doit être accordée lors de la configuration des comptes et des autorisations pour garantir que seules les données et opérations nécessaires sont autorisées. Par exemple, un compte en lecture seule ne peut pas effectuer les opérations INSERT, UPDATE et DELETE, ce qui réduit considérablement le risque d'attaques par injection SQL.

Résumé :

Cet article présente quatre méthodes pour empêcher les attaques par injection SQL dans le développement PHP, notamment la liaison de paramètres, l'échappement de chaîne, la vérification des entrées et le contrôle des autorisations de base de données. Les développeurs doivent choisir des mesures de protection appropriées en fonction de leurs scénarios d'application et de leurs besoins pour garantir la sécurité des applications Web. Dans le même temps, la mise à niveau de la version PHP et la mise à jour du logiciel de base de données en temps opportun sont également des moyens efficaces de prévenir les attaques par injection SQL.

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