On kiểm tra mã của bạn Tôi ngạc nhiên nó hoạt động ở tất cả khi bạn không trích dẫn literals bạn đang chèn - bạn sẽ được tạo mã như:
INSERT INTO user (password, username) VALUES (abc1234fg00000, admin);
Vì vậy, nó sẽ cho một lỗi mỗi lần . Giả sử đây chỉ là lỗi đánh máy ....
Tiện ích mở rộng mysql giới hạn khả năng thực hiện các cuộc tấn công bằng cách chỉ cho phép một truy vấn cho mỗi cuộc gọi. Ngoài ra, có giới hạn phạm vi cho một cuộc tấn công tiêm vào một tuyên bố INSERT. Thêm vào đó thực tế là bạn thay đổi biểu diễn thành định dạng trung lập trước khi nối vào câu lệnh chèn có nghĩa là nó không phải là một đại lộ tiềm năng cho một cuộc tấn công như vậy. Tuy nhiên, mã của bạn nên rơi xuống nếu ai đó đăng tên người dùng có chứa một trích dẫn duy nhất (nếu không thì bạn đã bật tính năng kích hoạt magic_quotes không được dùng nữa).
OTOH nếu bạn áp dụng cùng một phương pháp để xác nhận tài khoản khi đó bạn đang rộng mở cho các cuộc tấn công tiêm - xem xét
"SELECT 1
FROM users
WHERE username='" . $_POST['username'] . "'
AND password='" . sha1($_POST['username'] . "';";
Nếu $ _POST [ 'username'] chứa "admin' OR 1", sau đó hệ thống của bạn bị xâm phạm.
Bạn nên luôn sử dụng mysql_real_escape_string() trừ khi bạn đã thực hiện các dữ liệu an toàn bằng cách sử dụng chức năng khác nhau (ví dụ sha1, bas64_encode .... nhưng KHÔNG addslashes)
C.
bạn đã thử như thế nào? –
Với tất cả sự tôn trọng. Có hàng triệu người ngoài kia thông minh hơn bạn và tôi. Ai độc hại hơn nhiều. Những gì bạn có ở đó là lời mời mở để đưa trang web của bạn xuống. Chỉ vì bạn không thể thực hiện tiêm SQL thích hợp, không có nghĩa là nó không thể thực hiện được. –
sử dụng truy vấn ajax tùy chỉnh của tôi trong javascript từ văn bản được mã hóa bằng UTF-8 và từ bên trong một vài trình duyệt (mà tôi nhận ra có thể mã hóa dữ liệu). Có cách nào tốt nhất để kiểm tra không? – Supernovah