Maison  >  Article  >  base de données  >  Quelles sont les méthodes pour empêcher l’injection SQL ?

Quelles sont les méthodes pour empêcher l’injection SQL ?

WBOY
WBOYoriginal
2024-02-20 22:42:041346parcourir

Quelles sont les méthodes pour empêcher l’injection SQL ?

Quelles sont les méthodes pour empêcher l'injection SQL ? Des exemples de code spécifiques sont nécessaires

L'injection SQL est une menace courante pour la sécurité du réseau. Elle permet aux attaquants de modifier, supprimer ou divulguer des données dans la base de données en créant des données d'entrée malveillantes. Afin de prévenir efficacement les attaques par injection SQL, les développeurs doivent prendre une série de mesures de sécurité. Cet article présentera plusieurs méthodes couramment utilisées pour empêcher l’injection SQL et donnera des exemples de code correspondants.

Méthode 1 : Utiliser des requêtes paramétrées
Les requêtes paramétrées sont un moyen d'utiliser des espaces réservés pour remplacer les valeurs réelles des paramètres, réduisant ainsi la possibilité d'injection SQL. Voici un exemple de code Python utilisant des requêtes paramétrées :

import pymysql

# 建立数据库连接
conn = pymysql.connect(host='localhost', user='root', password='123456', db='mydb')

# 创建游标对象
cursor = conn.cursor()

# 执行参数化查询
username = input("请输入用户名:")
password = input("请输入密码:")
sql = "SELECT * FROM user WHERE username = %s AND password = %s"
cursor.execute(sql, (username, password))

# 获取查询结果
result = cursor.fetchall()

# 处理查询结果
if result:
    print("登录成功!")
else:
    print("用户名或密码错误!")

# 关闭游标和数据库连接
cursor.close()
conn.close()

Méthode 2 : utiliser le framework ORM
Le framework ORM (Object Relational Mapping) peut convertir les opérations de table de base de données en appels de méthode orientés objet, évitant ainsi efficacement les questions d'injection SQL.

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

# 建立数据库连接
engine = create_engine('mysql+pymysql://root:123456@localhost/mydb')
Session = sessionmaker(bind=engine)
session = Session()

# 执行查询
username = input("请输入用户名:")
password = input("请输入密码:")
result = session.query(User).filter_by(username=username, password=password).first()

# 处理查询结果
if result:
    print("登录成功!")
else:
    print("用户名或密码错误!")

# 关闭数据库连接
session.close()

Troisième méthode : validation et filtrage des entrées
La validation et le filtrage de la validité des données saisies par l'utilisateur sont une étape importante pour empêcher l'injection SQL. Voici un exemple de code PHP simple :

<?php
$username = $_POST['username'];
$password = $_POST['password'];

// 验证输入的数据
if (!preg_match("/^[a-zA-Z0-9]{6,}$/", $username)) {
    die("用户名不合法!");
}

// 过滤特殊字符
$username = addslashes($username);
$password = addslashes($password);

// 执行查询
$sql = "SELECT * FROM user WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, $sql);

// 处理查询结果
if (mysqli_num_rows($result) > 0) {
    echo "登录成功!";
} else {
    echo "用户名或密码错误!";
}

// 关闭数据库连接
mysqli_close($conn);
?>

Dans le code ci-dessus, nous utilisons des expressions régulières pour valider le nom d'utilisateur saisi, seuls les lettres et les chiffres sont autorisés, et la longueur ne doit pas être inférieure à 6 caractères. Dans le même temps, les données d'entrée sont filtrées à l'aide de la fonction addlashes et les caractères spéciaux sont échappés, évitant ainsi la possibilité d'une injection SQL.

Pour résumer, afin de prévenir les attaques par injection SQL, les développeurs peuvent adopter des requêtes paramétrées, utiliser des frameworks ORM, ainsi que la validation et le filtrage des entrées. Dans le même temps, un contrôle raisonnable des autorisations et une mise à jour régulière des correctifs système peuvent également améliorer efficacement la sécurité du système.

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