Tôi nhận được một vùng văn bản nơi người dùng có thể viết một bài báo. Bài viết có thể chứa văn bản (đậm và nghiêng), liên kết và video trên youtube. Làm cách nào để tôi cho phép các thẻ html nhất định đó và vẫn đăng mã ngăn chặn xss an toàn?Làm cách nào để cho phép một số thẻ html nhất định?
6
A
Trả lời
11
Tôi sẽ sử dụng HTMLPurifier, để đảm bảo rằng bạn chỉ giữ HTML
- Đó là hợp lệ
- và chỉ chứa các thẻ và các thuộc tính bạn đã chọn để cho phép
tôi nên thêm rằng PHP cung cấp các chức năng strip_tags()
, nhưng nó không phải là tốt (trích dẫn):
Vì
strip_tags()
không thực sự xác thực HTML, một phần hoặc thẻ bị hỏng có thể dẫn đến việc xóa nhiều văn bản/dữ liệu hơn mong đợi.
Chức năng này không sửa đổi bất kỳ thuộc tính trên các thẻ bạn cho phép sử dụngallowable_tags
, trong đó có phong cách và onmouseover thuộc tính mà người dùng tinh nghịch có thể lạm dụng khi đăng văn bản đó sẽ được hiển thị cho người dùng khác.
1
Nếu bạn đang tìm kiếm bảo vệ XSS thực, tôi khuyên bạn nên sử dụng HTMLPurifier. Làm điều đó cho mình là khá khó khăn nếu không phải không thể làm. Và nhất định có những sai lầm (/ lỗ) trong đó.
Các vấn đề liên quan
- 1. Làm cách nào để xóa tất cả các thẻ sau một số thẻ nhất định?
- 2. Làm cách nào để định cấu hình Tinymce để cho phép nhúng thẻ khi chỉnh sửa html?
- 3. Làm cách nào để cho phép các thẻ HTML được gửi trong một hộp văn bản trong asp.net?
- 4. Làm cách nào để xóa hình ảnh của UIButton cho một số trạng thái nhất định?
- 5. Làm cách nào để cho phép người dùng ẩn danh truy cập vào một số trang nhất định trong MVC?
- 6. xóa các thuộc tính nhất định khỏi các thẻ HTML
- 7. Trong Rails, làm thế nào tôi có thể cho phép một số html trong một khu vực văn bản?
- 8. Deserializate chỉ một số thẻ JSON nhất định với Jackson
- 9. Làm cách nào để gấp/mở thẻ HTML bằng Vim
- 10. Làm cách nào để chỉ nhúng một số dòng nhất định từ một ý chính?
- 11. Làm cách nào để IntelliJ nhận ra thẻ wicket html?
- 12. Tại sao jQuery không ẩn một số HTML nhất định?
- 13. Cách tìm thẻ chỉ với một số thuộc tính nhất định - BeautifulSoup
- 14. Làm cách nào để khóa/mở khóa phần tử HTML với Jquery trên một số điều kiện nhất định?
- 15. Làm cách nào để lọc một số dòng nhất định khỏi dấu vết ngăn xếp log4j?
- 16. Thẻ HTML để ngăn thẻ HTML được thực thi?
- 17. MYSQL - Làm cách nào để xuất các bảng chỉ định một số trường nhất định?
- 18. Làm cách nào để xác định số tuần của một ngày nhất định?
- 19. Visual Studio không cho phép tôi sử dụng một số tên biến nhất định
- 20. Chỉ cho phép một số miền nhất định có thể tải iFrame
- 21. Làm cách nào để chuyển html cho một khối link_to?
- 22. Làm cách nào để kiểm tra xem số có chia hết cho một số nhất định không?
- 23. Làm cách nào để thoát trình phân tích cú pháp đánh dấu cho một số đoạn văn bản nhất định?
- 24. Vim và Ctags: Bỏ qua một số tệp nhất định khi tạo thẻ
- 25. gitignore - chỉ cho phép một số tiện ích và tệp nhất định
- 26. Làm cách nào để chỉ ghi một số dòng nhất định của một tệp trong Perl?
- 27. Làm cách nào để gửi email được định dạng HTML?
- 28. Chỉ cho phép một số ký tự nhất định trong PHP
- 29. Làm thế nào để ngoại lệ cho một số quy tắc StyleCop nhất định?
- 30. Làm thế nào để làm cho subrepository Mercurial luôn luôn trỏ đến một changeset hoặc thẻ nhất định?
+1 để trích dẫn các ghi chú strip_tags() –
Thx! Có vẻ như htmlpurifier là con đường để đi. Chỉ cần làm rõ; htmlpurifier ngăn chặn xss, tiêm sql và tất cả các mã nguy hiểm khác? – Michael
Tôi đã sử dụng nó một vài lần, để làm sạch đầu vào của người dùng và đảm bảo nó chỉ chứa các thẻ mà tôi đã chọn cho phép; nếu bạn chọn cẩn thận các thẻ/thuộc tính được cho phép, nó sẽ ngăn XSS. Nhưng nó sẽ không làm bất cứ điều gì về SQL Injection: đó là một vấn đề khác, bạn sẽ giải quyết bằng cách đảm bảo những gì bạn đưa vào truy vấn SQL là an toàn * (số nguyên phải là số nguyên, chuỗi phải được thoát đúng cách, ... hoặc bạn nên sử dụng các câu lệnh đã chuẩn bị) * –