Bạn có ngăn chặn các cuộc tấn công XSS không?
Nếu bạn làm điều này thoát vào đúng thời điểm (*) sau đó có, bạn sẽ ngăn chặn-tiêm HTML. Đây là dạng tấn công XSS phổ biến nhất. Nó không chỉ là một vấn đề an ninh, bạn cần phải thực hiện thoát để dù sao mà các chuỗi với các ký tự đó sẽ hiển thị chính xác. Vấn đề bảo mật là một tập con của vấn đề chính xác.
tôi nghĩ rằng bạn cần vào danh sách trắng ở mức nhân vật quá, để ngăn chặn các cuộc tấn công nhất định
số HTML-thoát sẽ làm cho mỗi một trong những cuộc tấn công dưới dạng văn bản đơn giản không hoạt động trên trang web, mà là những gì bạn muốn. Phạm vi tấn công trên trang đó thể hiện các cách khác nhau để thực hiện HTML-injection, có thể nhận được xung quanh bộ lọc XSS “stupider” mà một số máy chủ triển khai để cố gắng ngăn chặn các cuộc tấn công HTML-injection thông thường. Điều này chứng tỏ rằng "bộ lọc XSS" vốn đã bị rò rỉ và không hiệu quả.
Có các hình thức tấn công XSS khác có thể hoặc không ảnh hưởng đến bạn, ví dụ: lược đồ xấu trên URI do người dùng gửi (javascript:
et al), tiêm mã vào dữ liệu được lặp lại thành khối JavaScript (nơi bạn cần JSON) phong cách thoát) hoặc vào biểu định kiểu hoặc tiêu đề phản hồi HTTP (một lần nữa, bạn luôn cần dạng mã hóa thích hợp khi bạn thả văn bản vào ngữ cảnh khác; bạn phải luôn nghi ngờ nếu bạn thấy bất kỳ nội dung nào có nội suy không loại trừ như "string $var string"
của PHP).
Sau đó, xử lý tải lên tệp, chính sách xuất xứ Flash, chuỗi quá dài UTF-8 trong trình duyệt cũ và các vấn đề tạo nội dung cấp ứng dụng; tất cả những điều này có khả năng dẫn đến việc tạo kịch bản cross-site. Nhưng HTML injection là một trong những chính mà mỗi ứng dụng web sẽ phải đối mặt, và hầu hết các ứng dụng PHP nhận được sai ngày hôm nay.
(*: là khi chèn nội dung văn bản vào HTML và không mất thời gian nào khác.Không có dữ liệu gửi biểu mẫu thoát HTML ở $_POST
/$_GET
khi bắt đầu tập lệnh của bạn, đây là lỗi sai lầm thường gặp.)
... Wikipedia nói "Thật là đáng chú ý là mặc dù nó được khuyến khích rộng rãi, chỉ cần thực hiện mã hóa thực thể HTML trên năm ký tự XML quan trọng không phải lúc nào cũng đủ để ngăn chặn nhiều hình thức XSS. Việc mã hóa có thể phức tạp và việc sử dụng thư viện mã hóa bảo mật được khuyến khích cao. " và trích dẫn bài viết này, mặc dù tôi không thể tìm thấy những gì trong bài viết đó biện minh cho tuyên bố: http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet –
Nó chỉ là khó khăn nếu bạn không biết những gì bạn đang làm hoặc đang làm việc đó ở những nơi khác nhau (sai). Chỉ cần nhất quán với nó. Mã hóa/thoát Tất cả đầu vào do người dùng điều khiển (URL yêu cầu, tham số yêu cầu, phần thân yêu cầu, v..v .. tất cả mọi thứ bắt nguồn từ người dùng) chỉ một lần trong khi hiển thị lại chúng trong lớp xem. Đó là tất cả. – BalusC
Hey Pool - Bạn có sẵn sàng thay đổi câu trả lời ưa thích không? Câu trả lời từ @bobince là tốt hơn và có nhiều upvotes hơn. – nslntmnx