Maison > développement back-end > tutoriel php > Comment éviter les attaques par injection SQL dans les fichiers PHP ?

Comment éviter les attaques par injection SQL dans les fichiers PHP ?

PHPz
Libérer: 2023-05-22 10:24:01
original
945 Les gens l'ont consulté

Avec le développement continu de la technologie Internet, les problèmes de sécurité des sites Web et des applications attirent de plus en plus l'attention. Parmi elles, l’attaque par injection SQL est une méthode d’attaque courante, notamment pour les sites Web et les applications écrites en PHP. Par conséquent, cet article expliquera comment éviter les attaques par injection SQL dans les fichiers PHP pour garantir la sécurité des sites Web et des applications.

  1. Utilisez des instructions préparées

Les instructions préparées sont un moyen important de prévenir les attaques par injection SQL. Il sépare les instructions et les paramètres SQL, évitant ainsi la possibilité d'attaques provoquées par une saisie incorrecte. Les instructions préparées couramment utilisées en PHP incluent PDO et MySQLi. Voici un exemple d'utilisation de PDO :

//连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
//预处理SQL语句
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username AND password = :password');
//绑定参数
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
//执行查询
$stmt->execute();
Copier après la connexion
  1. Requête paramétrée

Les requêtes paramétrées sont similaires aux instructions préparées, et séparent également les instructions et paramètres SQL. La différence est que la requête paramétrée fait référence à l'utilisation d'espaces réservés pour remplacer les paramètres dans l'instruction SQL et à la transmission des paramètres à la fonction de requête individuellement. Voici un exemple utilisant MySQLi :

//连接数据库
$conn = mysqli_connect('localhost', 'username', 'password', 'test');
//参数化查询
$stmt = mysqli_prepare($conn, 'SELECT * FROM users WHERE username = ? AND password = ?');
mysqli_stmt_bind_param($stmt, 'ss', $username, $password);
mysqli_stmt_execute($stmt);
Copier après la connexion
  1. Entrée filtrée

L'entrée utilisateur doit être correctement filtrée et validée avant d'être utilisée comme critère de requête SQL. Les fonctions de filtrage couramment utilisées en PHP incluent htmlspecialchars() et strip_tags(), qui peuvent filtrer les balises HTML et les caractères spéciaux. Par exemple :

//使用htmlspecialchars()过滤用户输入
$username = htmlspecialchars($_POST['username'], ENT_QUOTES, 'UTF-8');
$password = htmlspecialchars($_POST['password'], ENT_QUOTES, 'UTF-8');
//查询用户
$stmt = $pdo->query("SELECT * FROM users WHERE username = '{$username}' AND password = '{$password}'");
Copier après la connexion
  1. Vérifier le type de variable

Avant d'utiliser la saisie utilisateur comme conditions de requête SQL, vous devez également vérifier si son type de variable est correct. Par exemple, lorsque l'entrée utilisateur est une chaîne, elle doit être placée entre guillemets ; lorsque l'entrée utilisateur est un nombre, elle n'a pas besoin d'être placée entre guillemets. Les fonctions de vérification de type couramment utilisées en PHP incluent is_numeric() et is_string(), qui peuvent nous aider à vérifier si les variables sont des nombres et des chaînes. Par exemple :

$username = $_POST['username'];
if (is_string($username)) {
    //将字符串用引号括起来
    $username = "'" . $username . "'";
}
$password = $_POST['password'];
if (is_string($password)) {
    //将字符串用引号括起来
    $password = "'" . $password . "'";
}
//查询用户
$stmt = $pdo->query("SELECT * FROM users WHERE username = {$username} AND password = {$password}");
Copier après la connexion

En bref, l'attaque par injection SQL est une méthode d'attaque dangereuse et courante, et des mesures efficaces doivent être prises pour l'empêcher. Cet article présente plusieurs méthodes pour éviter les attaques par injection SQL, telles que les instructions préparées, les requêtes paramétrées, le filtrage des entrées et la vérification des types de variables. J'espère que cela sera utile aux développeurs PHP.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal