Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

SQL Injection คืออะไร และวิธีป้องกันอย่างไร


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)