2012-02-12 20 views
6

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?

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):

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ụng allowable_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.

+0

+1 để trích dẫn các ghi chú strip_tags() –

+0

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

+1

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ị) * –

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