Rumah  >  Artikel  >  pangkalan data  >  Apakah kaedah untuk mencegah suntikan sql?

Apakah kaedah untuk mencegah suntikan sql?

WBOY
WBOYasal
2024-02-20 22:42:041348semak imbas

Apakah kaedah untuk mencegah suntikan sql?

Apakah kaedah untuk menghalang suntikan SQL contoh kod khusus diperlukan

SQL suntikan adalah ancaman keselamatan rangkaian biasa Ia membenarkan penyerang mengubah suai, memadam atau membocorkan data dalam pangkalan data dengan membina data berniat jahat. Untuk mencegah serangan suntikan SQL dengan berkesan, pembangun perlu mengambil satu siri langkah keselamatan. Artikel ini akan memperkenalkan beberapa kaedah yang biasa digunakan untuk menghalang suntikan SQL dan memberikan contoh kod yang sepadan.

Kaedah 1: Gunakan pertanyaan berparameter
Pertanyaan berparameter ialah cara untuk menggunakan ruang letak untuk menggantikan nilai parameter sebenar, dengan itu mengurangkan kemungkinan suntikan SQL. Berikut ialah kod sampel Python menggunakan pertanyaan berparameter:

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()

Kaedah 2: Gunakan rangka kerja ORM
Rangka kerja ORM (Pemetaan Perhubungan Objek) boleh menukar operasi jadual pangkalan data kepada panggilan kaedah berorientasikan objek, dengan berkesan mengelakkan soalan suntikan 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()

Kaedah 3: Pengesahan dan penapisan input
Mengesahkan dan menapis kesahihan data yang dimasukkan pengguna ialah langkah penting untuk mencegah suntikan SQL. Berikut ialah contoh kod PHP mudah:

<?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);
?>

Dalam kod di atas, kami menggunakan ungkapan biasa untuk mengesahkan nama pengguna yang dimasukkan, hanya huruf dan nombor dibenarkan, dan panjangnya mestilah tidak kurang daripada 6 aksara. Pada masa yang sama, data input ditapis dengan menggunakan fungsi tanda miring tambahan dan aksara khas dilepaskan, dengan itu mengelakkan kemungkinan suntikan SQL.

Ringkasnya, untuk mengelakkan serangan suntikan SQL, pembangun boleh menggunakan kaedah seperti pertanyaan berparameter, penggunaan rangka kerja ORM dan pengesahan dan penapisan input. Pada masa yang sama, kawalan kebenaran yang munasabah dan kemas kini biasa tampalan sistem juga boleh meningkatkan keselamatan sistem dengan berkesan.

Atas ialah kandungan terperinci Apakah kaedah untuk mencegah suntikan sql?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn