Đầu tiên, giữ cho văn bản logic và rõ ràng:
trim() -- OK
htmlentities($comment, ENT_NOQUOTES) -- No; do later
mysqli_real_escape_string() -- Yes; required by API
nl2br() -- No; see below
Logic đằng sau những khuyến nghị đó:Dữ liệu trong cơ sở dữ liệu chỉ nên là dữ liệu thuần túy. Không phải htmlentities, không phải thẻ br. Tuy nhiên, bạn phải thực hiện Escape_string để chuyển dữ liệu từ PHP sang MySQL; những lần trốn thoát sẽ không được lưu trữ.
Nhưng ... Đó chỉ là bước giữa. Dữ liệu đến từ đâu? Các phiên bản PHP cũ hơn cố gắng "bảo vệ" bạn bằng cách thêm các phần mềm thoát và rác khác hoạt động tốt cho HTML, nhưng làm hỏng MySQL. Tắt tính năng thoát ma thuật như vậy và lấy dữ liệu thô.
Dữ liệu đi đến đâu? Có lẽ là HTML? Sau khi SELECTing
dữ liệu trở lại bảng, sau đó trước tiên hãy làm htmlentities()
và (tùy chọn) nl2br()
;
Lưu ý, nếu bạn muốn lưu giữ những thứ như <I>
(chữ nghiêng), bạn đang yêu cầu rắc rối - rắc rối lớn. Tất cả những gì hacker cần làm là <script> ...
để đưa tất cả các loại vi phạm vào trang web của bạn và có thể là toàn bộ hệ thống của bạn.