it-swarm-vi.com

Check_plain () có đủ không?

check_plain () đủ để hiển thị lại văn bản được nhập bởi người dùng trong trình duyệt hay tôi vẫn nên lọc với filter_xss () ?

16
Citricguy

Tôi tưởng tượng câu hỏi là về việc sử dụng check_plain(filter_xss($string)) hoặc filter_xss(check_plain($string)).

check_plain()filter_xss() có hai mục đích khác nhau và ngược lại:

  • check_plain() mã hóa các ký tự đặc biệt trong chuỗi văn bản thuần sau đó được hiển thị dưới dạng HTML.
  • filter_xss() lọc một chuỗi HTML để ngăn các lỗ hổng cross-site-scripting (XSS). Cụ thể mục đích của nó là:

    • Xóa các ký tự và cấu trúc có thể lừa trình duyệt
    • Đảm bảo tất cả các thực thể HTML được định dạng tốt
    • Đảm bảo tất cả các thẻ và thuộc tính HTML được định dạng tốt
    • Đảm bảo không có thẻ HTML nào chứa URL có giao thức không được phép (ví dụ: javascript :)

Nếu bạn sử dụng check_plain(), chuỗi được truyền cho hàm được coi là được sử dụng dưới dạng văn bản thuần túy; trong trường hợp như vậy, filter_xss() là không cần thiết. Nếu bạn sử dụng filter_xss(), thì chuỗi được truyền cho hàm được coi là HTML và check_plain() là không cần thiết.

Nếu câu hỏi là về việc sử dụng check_plain()filter_xss() trên các phần khác nhau của cùng một chuỗi thì như greggles đã chỉ ra trong nhận xét của anh ấy, bạn có thể sử dụng (ví dụ) check_plain() trên nội dung của các thuộc tính thẻ và filter_xss() trên toàn bộ thẻ HTML.

26
kiamlaluno