Tôi không chắc chắn ngoại lệ mà hướng dẫn sử dụng đề cập đến khi nói về cách bảo mật dữ liệu. Bạn có thể nói rằng ngoại lệ là khi dữ liệu đã được biết là an toàn. Ví dụ, sau đây là một vài trường hợp mà tôi suy nghĩ:
- dữ liệu được đánh máy như một số (điều này thực sự là một chuyên môn hóa của mặt hàng tiếp theo)
- bạn đã biết nó không chứa bất kỳ ký tự cần phải được thoát (ví dụ như nó xuất phát từ nhìn lên một cái gì đó trong một mảng "danh sách trắng" có chứa một vài lựa chọn bạn hardcoded)
Ví dụ, nếu bạn có $id = intval($_GET['id'])
sau đó bạn không cần phải thoát khỏi $id
trước khi tiêm nó vào một truy vấn.
Tuy nhiên! Bạn không bao giờ có thể làm tổn thương bạn thoát khỏi tất cả các đầu vào và làm như vậy sẽ loại bỏ cơ hội bạn giới thiệu các lỗ hổng trong mã của mình (ví dụ: nếu bạn quên thoát, nếu yêu cầu thay đổi hoặc bất kỳ điều gì thực sự). Vì vậy, tôi khuyên bạn nên đi vào thói quen thoát khỏi mọi thứ và quên đi "ngoại lệ".
Đối với %
và _
nhân vật như một phần của đầu vào, những không cần phải được thoát trừ khi bạn đang đi để nuôi đầu vào này cho một lệnh công nhận họ. Vì vậy, ví dụ, nếu bạn có một truy vấn như thế này:
$term = $_GET['term'];
$sql = sprintf("SELECT FROM table WHERE column LIKE '%%s%'",
mysql_real_escape_string($term));
Trong trường hợp này, nếu người dùng gõ một %
như một phần của $term
đó là hợp lý để giả định rằng họ muốn thực sự tìm kiếm một chữ %
. Do đó, trong trường hợp này, bạn nên thoát khỏi %
bằng cách thay thế bằng \%
(\
là ký tự thoát mặc định). str_replace
hoặc strtr
là hai lựa chọn tốt cho việc này.
Bạn nên sử dụng [PDO] (http://php.net/manual/en/book.pdo.php). Làm trang web cá nhân của bạn là một cơ hội tuyệt vời để tìm hiểu nó. – kapa
Điểm 2 đề cập đến mệnh đề 'LIKE' và không liên quan đến việc sử dụng dữ liệu chuỗi trong các ngữ cảnh khác. – mario
một trong các ngoại lệ có thể là chuỗi đã thoát. – hjpotter92