SQL Injection là gì?
SQL Injection là kỹ thuật tấn công web chèn mã độc vào cơ sở dữ liệu qua đầu vào trang web, phá hủy dữ liệu. Nguyên nhân chính: xây dựng truy vấn SQL bằng cách nối chuỗi đầu vào người dùng không an toàn.
Ví dụ: Truy vấn lấy dữ liệu sinh viên theo ID:
SELECT * FROM Students WHERE id = '12345 or 1=1'
Vì 1=1 luôn đúng, truy vấn trả về tất cả sinh viên -> rò rỉ dữ liệu.
Phòng tránh: Sử dụng Placeholder (%s)
Module mysql.connector hỗ trợ tham số hóa truy vấn bằng placeholder %s. Giá trị đầu vào sẽ được escape an toàn.
Ví dụ an toàn
Bảng MyTable:
+----------+---------+-----------+------------+ | Name | Class | City | Marks | +----------+---------+-----------+------------+ | Karan | 4 | Amritsar | 95 | | Sahil | 6 | Amritsar | 93 | | Kriti | 3 | Batala | 88 | | Khushi | 9 | Delhi | 90 | | Kirat | 5 | Delhi | 85 | +----------+---------+-----------+------------+
import mysql.connector
db = mysql.connector.connect(
host="your_host",
user="your_username",
password="your_password",
database="database_name"
)
cursor = db.cursor()
query = "SELECT * FROM Students WHERE Name = %s"
name = ("Karan",)
cursor.execute(query, name)
for row in cursor:
print(row)
Kết quả
('Karan', 4, 'Amritsar', 95)
Sử dụng placeholder %s giúp ngăn chặn SQL Injection hiệu quả.