Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

SQL Injection là gì?

Giới thiệu về SQL Injection

  • SQL injection là một lỗ hổng hoặc một kỹ thuật có thể phá hủy cơ sở dữ liệu của một trang web hoặc một ứng dụng web. Đây là một trong những cuộc tấn công dựa trên web được sử dụng rộng rãi nhất.
  • Mục tiêu chính của SQL injection là truy cập vào cơ sở dữ liệu của một trang web. Vì vậy, để SQL injection hoạt động, người ta cần một ứng dụng web được kết nối với cơ sở dữ liệu.
  • Vì cơ sở dữ liệu có tất cả dữ liệu bao gồm mật khẩu quản trị viên, tức là mật khẩu đăng nhập của chủ sở hữu, kẻ tấn công trang web có thể truy cập trang quản trị để chỉnh sửa trang web bằng cách điền vào biểu mẫu web.
  • Biểu mẫu web bao gồm tên người dùng và mật khẩu. Khi người dùng nhập nội dung nào đó vào trường đầu vào của biểu mẫu web, Truy vấn SQL SELECT được triển khai trên cơ sở dữ liệu.
  • Hệ thống cố gắng khớp các đầu vào tức là tên người dùng và mật khẩu do người dùng nhập với tên người dùng và mật khẩu đã được lưu trữ trong cơ sở dữ liệu. Nếu cả hai đầu vào đều khớp thì người dùng có quyền truy cập, nếu không thì quyền truy cập sẽ bị từ chối đối với người dùng.
  • Có một số trang web không có cơ chế chặn bất kỳ đầu vào nào khác. Các trang web như vậy rất dễ bị tấn công bởi SQL injection. Trong trường hợp này, bất kỳ truy vấn SQL nào cũng có thể được cung cấp làm đầu vào và hệ thống sẽ thực thi.
  • Ví dụ:kẻ tấn công có thể nhập một truy vấn để tải xuống toàn bộ cơ sở dữ liệu, xóa cơ sở dữ liệu, sửa đổi cơ sở dữ liệu và làm cho điều kiện luôn đúng. Nếu điều kiện mật khẩu luôn đúng, vì vậy không có vấn đề gì nếu bất kỳ mật khẩu nào được nhập. Đối với mật khẩu, hệ thống truy cập những mật khẩu được lưu trữ trong cơ sở dữ liệu, nhưng nếu một truy vấn được thực hiện để thả bảng mật khẩu trong cơ sở dữ liệu, hệ thống sẽ bắt đầu lấy bất kỳ mật khẩu nào. Bằng cách này, kẻ tấn công có thể truy cập vào cơ sở dữ liệu một cách dễ dàng. Giờ đây, anh ấy có thể biết tất cả mật khẩu của những người đã đăng nhập vào trang web, các bảng khác nhau và nội dung của chúng, cấu trúc bên trong của trang web và bất kỳ thông tin nào khác liên quan đến trang web.
  • Phương pháp này được gọi là SQL injection, trong đó bạn đưa một truy vấn vào cơ sở dữ liệu để thao tác với nó và có được quyền truy cập trái phép vào nó. Đây là kiểu tấn công trang web nguy hiểm nhất đối với cơ sở dữ liệu dựa trên SQL.
  • Một cách để ngăn chặn các cuộc tấn công như vậy là chặn các đầu vào không cần thiết ngoài tên người dùng và mật khẩu.
  • Các lệnh chèn SQL được thực hiện tại thời điểm chạy. Vì vậy, hãy tránh các lệnh đầu vào động. Ngăn chặn cơ sở dữ liệu bằng tường lửa ứng dụng web . Ngoài ra, không tiết lộ bất kỳ thông tin bí mật nào liên quan đến trang web cho bất kỳ ai.
  • Các trang web có thể bị thiệt hại về dữ liệu và tài chính lớn do các cuộc tấn công SQL như vậy.

Ví dụ:

Giả sử , có một ứng dụng web với cơ sở dữ liệu được kết nối với nó. Ứng dụng web này có thể lấy đầu vào từ người dùng và lưu trữ thông tin vào cơ sở dữ liệu hoặc tìm nạp dữ liệu từ cơ sở dữ liệu và hiển thị cho người dùng.

Trong cả hai trường hợp, có một truy vấn SQL hoặc truy vấn cơ sở dữ liệu được tạo trên ứng dụng web được gửi đến cơ sở dữ liệu và truy vấn này được thực thi trên cơ sở dữ liệu và thông tin liên quan được trả lại cho ứng dụng web. Đây là cách hoạt động của kịch bản bình thường.

Vì vậy, khi kẻ tấn công sử dụng SQL injection, hắn sẽ cố gắng thao túng truy vấn cơ sở dữ liệu này để khiến nó thực hiện một điều gì đó mà lý tưởng là không nên làm. Vì vậy, kẻ tấn công thay đổi truy vấn SQL, thao túng nó, anh ta đưa một số chuỗi độc hại vào truy vấn SQL và sau đó khiến nó thực hiện điều gì đó trái phép. Vì vậy, bây giờ truy vấn cơ sở dữ liệu được thao tác bởi kẻ tấn công, sau đó truy vấn độc hại này được gửi đến cơ sở dữ liệu, nó được thực thi ở đó và các kết quả liên quan được trả về.

Điều này được gọi là SQL injection. SQL injection là một kỹ thuật chèn mã được sử dụng để thực thi các câu lệnh SQL động và độc hại. Các cuộc tấn công SQL là thứ mà kẻ tấn công sử dụng để kiểm soát các máy chủ cơ sở dữ liệu.

Cách ngăn việc đưa vào SQL

  1. Tránh sử dụng SQL động

Các đầu vào do người dùng cung cấp không được đặt trực tiếp vào truy vấn SQL sẽ được vận hành trên cơ sở dữ liệu. Thay vì sử dụng SQL động, người ta nên sử dụng các thủ tục được lưu trữ, các câu lệnh chuẩn bị sẵn và các truy vấn được tham số hóa vì chúng an toàn hơn so với các truy vấn SQL động.

  • Đầu vào do người dùng cung cấp phải được khử trùng

Loại dữ liệu mà người dùng sẽ cung cấp phải được khớp và xác minh chính xác với loại dự kiến.

  • Dữ liệu nhạy cảm không được ở dạng văn bản rõ ràng

Trước khi lưu trữ dữ liệu bí mật như mật khẩu vào cơ sở dữ liệu, nó phải được mã hóa đúng cách bằng các hàm băm. Salting phải được áp dụng cho các băm được mã hóa để cung cấp thêm một lớp bảo mật cho dữ liệu bí mật.

  • Lỗi cơ sở dữ liệu không được hiển thị trực tiếp cho người dùng

Thông tin lỗi được hiển thị cho kẻ tấn công có thể giúp hắn lấy thông tin về cơ sở dữ liệu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hội thảo trên web về Plan Explorer 3.0 - Mẫu và Hỏi và Đáp

  2. Huawei GaussDB

  3. Mô hình dữ liệu nhà thông minh

  4. Đã cập nhật tùy chọn cấp cơ sở dữ liệu SQL Azure

  5. Hiểu vai trò của kiến ​​trúc sư dữ liệu trong quản trị dữ liệu