SQL Injection เป็นเทคนิคการแฮกเว็บไซต์ โดยการฉีดโค้ดร้ายเข้าไปในฐานข้อมูล ทำลายข้อมูล เกิดจากการรับค่าจากผู้ใช้มาใส่ใน SQL query โดยไม่ตรวจสอบ
ตัวอย่าง: ตารางนักเรียน ให้กรอกรหัสนักเรียนเพื่อดูข้อมูลของตัวเอง Query รับค่าจาก input
ผู้ใช้กรอก 12345 or 1=1 Query กลายเป็น:
SELECT * FROM Students WHERE id = 12345 or 1=1
เนื่องจาก 1=1 เป็นจริงตลอด จึงคืนข้อมูลนักเรียนคนอื่นๆ ทำให้ข้อมูลไมปลอดภัย
โมดูล MySQL Connector มีวิธีป้องกันด้วย placeholder %s (Parameterized Query)
ตาราง 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)ใช้ placeholder %s และส่งค่าเป็น tuple ป้องกัน SQL Injection
ผลลัพธ์
('Karan', 4, 'Amritsar', 95)