Command Palette

Search for a command to run...

Thuật ngữ SQL Injection (SQLi)

SQL Injection (SQLi) là gì?

SQL Injection (SQLi) là một loại tấn công mà kẻ tấn công nhập câu lệnh SQL độc hại vào trường nhập liệu để thao túng cơ sở dữ liệu.

Cuộc tấn công này nhắm vào các ứng dụng không xử lý đúng cách việc xác thực, nhập liệu của người dùng, cho phép truy cập trái phép vào dữ liệu nhạy cảm như mật khẩu hoặc thông tin thẻ tín dụng, v.v.

Cách hoạt động của SQL Injection

Khi một ứng dụng trực tiếp bao gồm đầu vào của người dùng trong một truy vấn cơ sở dữ liệu mà không có xác thực đúng cách, kẻ tấn công có thể sửa đổi hành vi của truy vấn để nhập một câu lệnh SQL độc hại.

Ví dụ:

SELECT * FROM users WHERE username = 'admin' AND password = '12345';

Kẻ tấn công có thể nhập:

' OR '1'='1

Dẫn đến:

SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';

Điều này luôn trả về đúng, cho phép truy cập trái phép.

Tại sao SQL Injection quan trọng trong an ninh mạng

SQL Injection là kỹ thuật nguy hiểm nhất và lâu đời nhất trong an ninh mạng. Loại tấn công này liên tục được liệt kê trong OWASP Top 10.

Ngay cả những lỗ hổng nhỏ cũng cho phép kẻ tấn công:

  • Truy cập, sửa đổi hoặc xóa dữ liệu
  • Vượt qua xác thực
  • Thực hiện các thao tác quản trị trên cơ sở dữ liệu.
  • Xâm phạm toàn bộ hệ thống.

Các loại SQL Injection phổ biến

  • Classic SQLi : Tiêm trực tiếp qua các biểu mẫu web hoặc tham số URL.
  • Blind SQLi : Kẻ tấn công suy luận thông tin cơ sở dữ liệu gián tiếp (ví dụ, qua thông báo lỗi hoặc thời gian phản hồi).
  • Union-based SQLi : Sử dụng toán tử UNION để kết hợp kết quả từ nhiều truy vấn.
  • Error-based SQLi : Dựa vào thông báo lỗi của cơ sở dữ liệu để trích xuất thông tin.
  • Time-based Blind SQLi : Khai thác độ trễ phản hồi của máy chủ để đoán kết quả truy vấn.

Cách ngăn chặn SQL Injection

1. Sử dụng truy vấn có tham số (Prepared Statements)

Đảm bảo các lệnh SQL xử lý đầu vào của người dùng như dữ liệu, không phải mã thực thi.

cursor.execute("SELECT * FROM users WHERE username = ?", (username,))

2. Kiểm tra và làm sạch đầu vào

Kiểm tra tất cả đầu vào từ người dùng, chỉ cho phép các ký tự mong đợi.

3. Sử dụng các framework ORM

Các framework như Prisma, Hibernate, v.v., giảm thiểu việc xử lý SQL trực tiếp.

4. Nguyên tắc quyền tối thiểu

Giới hạn quyền người dùng, chỉ cấp quyền cần thiết.

5. Kiểm tra bảo mật thường xuyên

Sử dụng các công cụ kiểm tra bảo mật ứng dụng như SAST, DAST hoặc IAST để phát hiện các lỗ hổng tiêm nhiễm sớm.

Ví dụ trong Thế giới Thực

Một trang web cửa hàng trực tuyến đã bị xâm nhập khi kẻ tấn công sử dụng một lỗ hổng tiêm nhiễm SQL trong biểu mẫu đăng nhập để trích xuất thông tin thẻ tín dụng từ cơ sở dữ liệu của nó.

Thuật ngữ Liên quan

Bước Tiếp Theo

Sẵn sàng bảo vệ ứng dụng của bạn? Chọn con đường của bạn phía trước.

Tham gia cùng hơn 500 công ty đã bảo vệ ứng dụng của họ với Plexicus

SOC 2 Compliant
ISO 27001 Certified
Enterprise Ready