Chủ đề này là rất sai!
Bạn KHÔNG nên lọc đầu vào của người dùng! Đó là thông tin đã được anh ta nhập vào. Bạn sẽ làm gì nếu tôi muốn mật khẩu của mình giống như: '"'>s3cr3t<script>alert()</script>
Lọc ký tự và để lại mật khẩu thay đổi, vì vậy tôi thậm chí không thể thành công trong lần đăng nhập đầu tiên? Thật tệ.
Giải pháp thích hợp là sử dụng báo cáo đã chuẩn bị hoặc mysql_real_escape_string()
để tránh tiêm sql và sử dụng thoát khỏi ngữ cảnh của các ký tự để tránh mã html của bạn bị rối tung lên.
Để tôi nhắc bạn rằng web chỉ là một trong những cách bạn có thể thể hiện thông tin được người dùng nhập. Bạn có chấp nhận loại bỏ như vậy nếu một số phần mềm máy tính để bàn làm điều đó? Tôi hy vọng câu trả lời của bạn là KHÔNG và bạn sẽ hiểu tại sao điều này không đúng.
Lưu ý rằng trong các ngữ cảnh khác nhau, các ký tự khác nhau phải được thoát. Ví dụ, nếu bạn cần để hiển thị tên người dùng đầu tiên như một tooltip, bạn sẽ sử dụng một cái gì đó như:
<span title="{$user->firstName}">{$user->firstName}</span>
Tuy nhiên, nếu người dùng đã đặt tên đầu tiên của mình để được như '"><script>window.document.location.href="http://google.com"</script>
gì được bạn sẽ làm gì? Bỏ dấu ngoặc kép? Điều này sẽ rất sai! Thay vì làm điều này không có ý nghĩa, hãy xem xét thoát khỏi các dấu ngoặc kép trong khi hiển thị dữ liệu, không phải trong khi vẫn tồn tại nó!
Một ngữ cảnh khác bạn nên xem xét trong khi hiển thị chính giá trị đó. Hãy xem xét mã html đã sử dụng trước đây và tưởng tượng tên của người dùng giống như <textarea>
. Điều này sẽ bọc tất cả các mã html sau đó vào yếu tố textarea này, do đó phá vỡ toàn bộ trang.
Một lần nữa - hãy xem xét thoát dữ liệu tùy thuộc vào ngữ cảnh bạn đang sử dụng nó!
P.S Không thực sự chắc chắn cách phản ứng trên các phiếu bầu phủ định đó. Bạn, mọi người, có thực sự đọc câu trả lời của tôi không?
dupe: http://stackoverflow.com/questions/129677/whats-the-best-method-for-sanitizing-user-input-with-php – troelskn
Cách tiếp cận này sai về nhiều khía cạnh! Tôi đã đăng câu trả lời dưới đây và đánh giá từng câu trả lời -1 cho tác giả của họ từ chối suy nghĩ. –