Hi quý vị. Today, chúng tôi xin chia sẽ về các chủ đề ít người biết xung quanh bóng đá bằng bài viết Lỗi Sql Injection
Phần nhiều nguồn đều được cập nhật thông tin từ những nguồn website nổi tiếng khác nên sẽ có vài phần khó hiểu.
Mong mỗi người thông cảm, xin nhận góp ý & gạch đá bên dưới comment
Quý độc giả vui lòng đọc nội dung này ở nơi không có tiếng ồn cá nhân để đạt hiệu quả cao nhất
Tránh xa tất cả những dòng thiết bị gây xao nhoãng trong các công việc tập kết
Bookmark lại bài viết vì mình sẽ update thường xuyên
Mục lục Mục lục
SQL Injection là gì? Các ví dụ thực tế về SQL Injection Ví dụ về các nguy cơ tấn công SQL Injection Các bộ phận dễ bị tổn thương Cách giảm thiểu và ngăn chặn SQL Injection
SQL Injection là gì?
SQL Injection là một kỹ thuật tận dụng các lỗ hổng truy vấn của các ứng dụng. Nó được thực hiện bằng cách chèn một đoạn mã SQL để làm sai lệch truy vấn ban đầu, để dữ liệu có thể được trích xuất từ cơ sở dữ liệu. SQL injection có thể cho phép những kẻ tấn công thực hiện các hành động, như quản trị viên web, trên cơ sở dữ liệu của ứng dụng.
Đang xem: lỗi tiêm sql
Các ví dụ thực tế về SQL Injection
Ví dụ, trong biểu mẫu đăng nhập, người dùng nhập dữ liệu, trong trường tìm kiếm, người dùng nhập văn bản tìm kiếm, trong biểu mẫu lưu dữ liệu, người dùng nhập dữ liệu cần lưu. Tất cả dữ liệu được chỉ định này sẽ được đưa vào cơ sở dữ liệu.
Thay vì nhập đúng dữ liệu, kẻ tấn công lợi dụng lỗ hổng để chèn và thực thi các câu lệnh SQL bất hợp pháp để lấy dữ liệu của người dùng… SQL Injection được thực hiện bằng ngôn ngữ lập trình SQL. SQL (Ngôn ngữ truy vấn có cấu trúc) được sử dụng để quản lý dữ liệu được lưu trữ trong toàn bộ cơ sở dữ liệu.
Chuỗi SQL: 5 mẹo dành cho SQL
Tuy vậy Ngày nay chúng ta thường làm việc trên các khuôn khổ hiện đại. Tất cả các khuôn khổ đã được kiểm tra cẩn thận để tránh lỗi, bao gồm cả SQL Injection.
Sự nguy hiểm của SQL Injection
Hack tài khoản cá nhân. Đánh cắp hoặc sao chép trang web hoặc dữ liệu hệ thống. Thay đổi dữ liệu hệ thống nhạy cảm. Xóa dữ liệu hệ thống nhạy cảm và quan trọng. Người dùng có thể đăng nhập vào ứng dụng với tư cách người dùng khác, thậm chí với tư cách quản trị viên. Người dùng có thể xem thông tin cá nhân thuộc về người dùng khác, ví dụ chi tiết hồ sơ của người dùng khác, chi tiết giao dịch của họ,… Người dùng có thể sửa đổi cấu trúc của cơ sở dữ liệu, thậm chí xóa các bảng trong cơ sở dữ liệu ứng dụng. Người dùng có thể điều khiển máy chủ cơ sở dữ liệu và thực hiện các lệnh theo ý muốn.
Câu chuyện bên MySQL
Ví dụ về tấn công
Kiểm tra lỗ hổng này có thể được thực hiện rất dễ dàng. Đôi khi chúng ta chỉ cần nhập ký hiệu ”hoặc” vào các trường được chọn. Nếu nó trả về bất kỳ thông báo không mong muốn hoặc bất thường nào, thì chúng tôi có thể chắc chắn rằng SQL Injection có thể thực hiện được cho trường đó.
Ví dụ, một biểu mẫu đăng nhập như sau
Và mã trình xử lý máy chủ của bạn:
if (Isset ($ _ POST) && Isset ($ _ POST))
Nếu người dùng không nhập bình thường, nhưng ví dụ, họ thêm dấu nháy đơn ”hoặc”, mã của bạn sẽ ngay lập tức bị lỗi. Hoặc họ có thể sửa nó thành một truy vấn luôn đúng như thế này.
Xem thêm: Top 7 Món Cà Ri Ngon Và Cách Nấu Món Cà Ri Gà Ngon Nhất Tại Nhà
CHỌN * TỪ tbl_user WHERE tên người dùng = “” HOẶC “1” = “1” và mật khẩu = “” HOẶC “1” = “1”
Hoặc chèn một câu lệnh truy vấn sau:
VĐ:
CHỌN * TỪ tbl_user WHERE tên người dùng = “quản trị viên” và mật khẩu = “quản trị viên”; Bỏ người dùng bảng;
Các bộ phận dễ bị tổn thương
Các bộ phận dễ bị tổn thương bao gồm:
Hình thức đăng nhập Hình thức tìm kiếm Hình thức nhận xét Bất kỳ trường lưu hoặc nhập dữ liệu Liên kết của trang web
Cần lưu ý rằng trong khi kiểm tra chống lại cuộc tấn công này, không thể kiểm tra chỉ một hoặc một vài trường vì một trường có thể được bảo vệ chống lại SQL Injection, trường khác có thể không. Do đó, điều quan trọng là đừng quên kiểm tra tất cả các trường của trang web.
Cách giảm thiểu và ngăn chặn SQL Injection
Luôn kiểm tra kỹ các trường nhập dữ liệu và bạn cần ràng buộc cẩn thận dữ liệu đầu vào của người dùng.
Ví dụ:
// Thông thường $ id = $ _GET; // Ràng buộc $ id = Isset ($ _ GET)? (String) (int) $ _ GET: false;
Sử dụng Biểu thức chính quy để loại bỏ các ký tự lạ hoặc các ký tự không phải số.
$ id = Isset ($ _ GET)? $ _GET: sai; $ id = str_replace (“//”, “”, $ id);
Hoặc sử dụng các chức năng có sẵn để giảm lỗi. Bất cứ khi nào truy vấn, mọi người nên sử dụng hàm mysqli_real_escape_string để chuyển đổi một chuỗi thành một truy vấn an toàn.
Xem thêm: Quy Đổi Kn Sang Tấn Lực Thành Khác (Tf Sang Kn), 1Kn Bằng Bao Nhiêu Tấn
$ id = Isset ($ _ GET)? (string) (int) $ _ GET: false; $ sql = “CHỌN * TỪ tbl_user WHERE id =”. mysqli_real_escape_string ($ id);
Và lời khuyên cuối cùng là chúng ta nên sử dụng các Framework và hạn chế sử dụng code thuần túy nhất có thể. Framework luôn có cộng đồng hoặc các chuyên gia bảo mật hỗ trợ tìm lỗi và cập nhật liên tục, do đó chúng tôi có thể giảm thời gian xử lý lỗi để tăng thời gian phát triển sản phẩm.
Nguồn tổng hợp