Tôi có biểu mẫu có hộp văn bản đăng dữ liệu lên tệp php sử dụng chức năng "htmlentities" để đảm bảo an toàn cho email tới chủ sở hữu trang web.PHP htmlentities không đủ để ngăn chặn tin tặc tiêm html từ biểu mẫu
Vấn đề là ai đó đã quản lý để nhận siêu kết nối trong văn bản và htmlentities() sẽ không xóa nó.
Đây là html textbox của tôi:
<input name="usertext" type="text" />
Đây là mã PHP của tôi tiếp nhận các dữ liệu sau (tôi rời mã email ra bởi vì đó không phải là vấn đề tôi đã thay đổi nó để chỉ echo dữ liệu nhận được như vậy. tôi có thể cố gắng để tái tạo những gì các hacker đã làm Nếu tôi biết làm thế nào ông đã làm điều đó, tôi có thể tìm thấy một cách để ngăn chặn nó xảy ra):.
echo trim(htmlentities($_POST["usertext"], ENT_QUOTES));
Bây giờ các hacker gửi một số dữ liệu và điều này là kết quả html (mã nguồn - điều đó có nghĩa là nó đã hiển thị một liên kết bình thường trong trình duyệt):
<a target="_blank" href="mailto:[email protected]">[email protected]</a>
Tôi nghĩ rằng htmlentities() sẽ luôn ngăn mọi người không thể nhập html dưới bất kỳ hình thức nào. Nếu tôi nhập một siêu liên kết như:
<a href="aaa" />
tôi nhận được:
<a href="aaa" />
Nhưng văn bản của hacker không được mã hóa như thế.
Vì vậy, câu hỏi của tôi là:
- Làm thế nào mà các hacker nhập thẻ html để các htmlentities() chức năng đã không làm gì với nó?
- Làm cách nào để sao chép nó để thử nghiệm? (có thể được trả lời bởi câu hỏi trên)
Tôi đã thực hiện một số nghiên cứu và có thể tin tặc đã mã hóa văn bản của anh ấy bằng utf-7 hoặc gì đó?
Tôi đã nhận được một vài email có cùng các liên kết này. Hacker này rõ ràng đang kiểm tra trang web của tôi để xem liệu anh ta có thể làm XSS hay gì đó không.
Đăng nhập yêu cầu thô với nội dung của trường $ _POST ["usertext"] khi được gửi. Bạn cũng có thể thêm mã hóa vào htmlentities phải khớp với mã hóa nội dung. – MatsLindh
Bạn đã kiểm tra JavaScript được bao gồm ở đâu đó, có thể nó được tạo động? – martinstoeckli
Bạn có mã hóa đúng nội dung html của mình trước khi gửi không? – inhan