Cách duy nhất là thoát đúng cách dữ liệu do người dùng gửi. Những người khác đã chỉ ra một số cách để làm như vậy.
Có một cách khác: tuyên bố chuẩn bị sẵn và trình giữ chỗ. Mọi báo cáo chuẩn bị được hỗ trợ bởi mọi hiện đại Giao diện cơ sở dữ liệu PHP, bao gồm mysqli và PDO .
Hãy sử dụng PDO như một minh chứng. Giả sử chúng tôi muốn cập nhật một chút dữ liệu trong bảng foo
do người dùng gửi.
$sql = 'UPDATE foo SET bar = ? WHERE user_id = ?';
$sh = $db->prepare($sql);
$sh->execute(array( $_POST['bar'], $_SESSION['user_id'] ));
Các biến trong mảng được chuyển đến execute
thay thế phần giữ chỗ dấu chấm hỏi trong truy vấn. Khi điều này xảy ra, chúng được tự động thoát và được trích dẫn . Bạn không cần phải thoát chúng theo cách thủ công để đưa chúng vào cơ sở dữ liệu an toàn!
Mặt khác, bạn vẫn cần lọc chúng để tìm nội dung không mong muốn, như HTML, Javascript, các chữ cái mà bạn mong đợi là số, v.v. Làm cho dữ liệu an toàn để chèn vào cơ sở dữ liệu là chỉ một nửa trận chiến .