Computer >> Máy Tính >  >> Lập trình >> Python

SQL injection là gì? Làm thế nào bạn có thể ngăn chặn nó?

SQL injection là một kỹ thuật hack web. Đây là kỹ thuật chèn mã sẽ chèn mã độc vào cơ sở dữ liệu của bạn và phá hủy cơ sở dữ liệu. Đây là hành động chèn mã độc hại thông qua đầu vào trang web.

Nguyên nhân chính của SQL injection là cung cấp dữ liệu một cách thông minh vào truy vấn SQL để thao tác dữ liệu bên trong cơ sở dữ liệu của chúng tôi.

Giả sử chúng ta có một bảng với dữ liệu học sinh. Mỗi sinh viên có thể xem dữ liệu của riêng mình bằng cách sử dụng id sinh viên của mình. Truy vấn SQL được thiết kế sao cho nó lấy đầu vào id sinh viên từ sinh viên.

Bây giờ, sinh viên có thể nhập id sinh viên của mình là “12345 hoặc 1 =1”. Điều này chuyển thành truy vấn followinq.

SELECT * FROM Students WHERE id==12345 or 1=1

Bây giờ, truy vấn trên cũng sẽ trả về các bản ghi của các sinh viên khác vì 1 =1 luôn đúng. Do đó, dữ liệu của các sinh viên khác không an toàn và dễ bị tin tặc sử dụng.

Mô-đun trình kết nối Mysql có phương thức để thoát các giá trị truy vấn để ngăn chặn việc đưa vào SQL. Các giá trị truy vấn có thể được thoát bằng cách sử dụng trình giữ chỗ% s.

Giả sử, chúng ta có một bảng tên là “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      |
+----------+---------+-----------+------------+

Ví dụ

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 myresult:
   print(row)

Đoạn mã trên cho thấy việc sử dụng trình giữ chỗ để thoát các giá trị truy vấn.

Đầu ra

(‘Karan’, 4, ‘Amritsar’ , 95)