Cách ngăn chặn SQL Injection trong PHP (có Hình ảnh)

Mục lục:

Cách ngăn chặn SQL Injection trong PHP (có Hình ảnh)
Cách ngăn chặn SQL Injection trong PHP (có Hình ảnh)

Video: Cách ngăn chặn SQL Injection trong PHP (có Hình ảnh)

Video: Cách ngăn chặn SQL Injection trong PHP (có Hình ảnh)
Video: 🔥 8 Thứ Bí Ẩn và Đáng Sợ Nhất Được Con Người Tìm Thấy Dưới Đáy Đại Dương | Kính Lúp TV 2024, Có thể
Anonim

WikiHow này hướng dẫn bạn cách ngăn chặn việc chèn SQL bằng Câu lệnh chuẩn bị sẵn trong PHP. SQL injection là một trong những lỗ hổng phổ biến nhất trong các ứng dụng Web ngày nay. Các câu lệnh chuẩn bị sử dụng các tham số ràng buộc và không kết hợp các biến với chuỗi SQL, khiến kẻ tấn công không thể sửa đổi câu lệnh SQL.

Các câu lệnh chuẩn bị kết hợp biến với câu lệnh SQL đã biên dịch để SQL và các biến được gửi riêng biệt. Các biến sau đó được hiểu là các chuỗi đơn thuần và không phải là một phần của câu lệnh SQL. Sử dụng các phương pháp trong các bước bên dưới, bạn sẽ không cần phải sử dụng bất kỳ kỹ thuật lọc SQL injection nào khác như mysql_real_escape_string ().

Các bước

Phần 1/2: Hiểu SQL Injection

Bước 1. SQL Injection là một loại lỗ hổng trong các ứng dụng sử dụng cơ sở dữ liệu SQL

Lỗ hổng bảo mật phát sinh khi đầu vào của người dùng được sử dụng trong Câu lệnh SQL:

$ name = $ _GET ['tên người dùng']; $ query = "CHỌN mật khẩu TỪ tbl_user WHERE name = '$ name'";

Bước 2. Giá trị mà người dùng nhập vào tên người dùng biến URL sẽ được gán cho biến $ name

Sau đó, nó được đặt trực tiếp vào câu lệnh SQL, giúp người dùng có thể chỉnh sửa câu lệnh SQL.

$ name = "admin 'HOẶC 1 = 1 -"; $ query = "CHỌN mật khẩu TỪ tbl_user WHERE name = '$ name'";

Bước 3. Cơ sở dữ liệu SQL sau đó sẽ nhận được câu lệnh SQL như sau:

CHỌN mật khẩu TỪ tbl_users WHERE name = 'admin' HOẶC 1 = 1 - '

  • Đây là SQL hợp lệ, nhưng thay vì trả về một mật khẩu cho người dùng, câu lệnh sẽ trả về tất cả các mật khẩu trong bảng tbl_user. Đây không phải là thứ bạn muốn trong các ứng dụng web của mình.

Phần 2/2: Sử dụng mySQLi để tạo các câu lệnh chuẩn bị

2542820 1
2542820 1

Bước 1. Tạo Truy vấn CHỌN mySQL

Sử dụng mã bên dưới để CHỌN dữ liệu từ một bảng bằng cách sử dụng Câu lệnh chuẩn bị sẵn của mySQLi.

$ name = $ _GET ['tên người dùng']; if ($ stmt = $ mysqli-> started ("CHỌN mật khẩu TỪ tbl_users WHERE name =?")) {// Liên kết một biến với tham số dưới dạng một chuỗi. $ stmt-> bind_param ("s", $ name); // Thực hiện câu lệnh. $ stmt-> thi hành (); // Lấy các biến từ truy vấn. $ stmt-> bind_result ($ pass); // Tìm nạp dữ liệu. $ stmt-> fetch (); // Hiển thị dữ liệu. printf ("Mật khẩu cho người dùng% s là% s / n", $ name, $ pass); // Đóng câu lệnh đã chuẩn bị. $ stmt-> close (); }

Lưu ý: Biến $ mysqli là Đối tượng kết nối mySQLi

2542820 2
2542820 2

Bước 2. Tạo Truy vấn CHÈN mySQLi

Sử dụng mã bên dưới để CHÈN dữ liệu vào bảng bằng cách sử dụng Câu lệnh chuẩn bị sẵn của mySQLi.

$ name = $ _GET ['tên người dùng']; $ password = $ _GET ['password']; if ($ stmt = $ mysqli-> standard ("CHÈN VÀO tbl_users (tên, mật khẩu) VALUES (?,?)")) {// Ràng buộc các biến với tham số dưới dạng chuỗi. $ stmt-> bind_param ("ss", $ name, $ password); // Thực hiện câu lệnh. $ stmt-> thi hành (); // Đóng câu lệnh đã chuẩn bị. $ stmt-> close (); }

Lưu ý: Biến $ mysqli là Đối tượng kết nối mySQLi

2542820 3
2542820 3

Bước 3. Tạo Truy vấn CẬP NHẬT mySQLi

Sử dụng mã bên dưới để CẬP NHẬT dữ liệu trong bảng bằng cách sử dụng Câu lệnh chuẩn bị sẵn của mySQLi.

$ name = $ _GET ['tên người dùng']; $ password = $ _GET ['password']; if ($ stmt = $ mysqli-> standard ("CẬP NHẬT tbl_users ĐẶT mật khẩu =? WHERE name =?")) {// Liên kết các biến với tham số dưới dạng chuỗi. $ stmt-> bind_param ("ss", $ password, $ name); // Thực hiện câu lệnh. $ stmt-> thi hành (); // Đóng câu lệnh đã chuẩn bị. $ stmt-> close (); }

Lưu ý: Biến $ mysqli là Đối tượng kết nối mySQLi

2542820 4
2542820 4

Bước 4. Tạo truy vấn mySQLi DELETE

Tập lệnh dưới đây là cách XÓA dữ liệu khỏi bảng bằng cách sử dụng Câu lệnh chuẩn bị sẵn của mySQLi.

$ name = $ _GET ['tên người dùng']; $ password = $ _GET ['password']; if ($ stmt = $ mysqli-> standard ("XÓA TỪ Tbl_users WHERE name =?")) {// Liên kết biến với tham số dưới dạng một chuỗi. $ stmt-> bind_param ("s", $ name); // Thực hiện câu lệnh. $ stmt-> thi hành (); // Đóng câu lệnh đã chuẩn bị. $ stmt-> close (); }

Đề xuất: