Đầu tiên, hãy đọc về những điều này trong API Drupal:
Vì vậy, check_plain()
mã hóa ký tự đặc biệt có ý nghĩa đặc biệt trong HTML (như <
và &
) vào thực thể văn bản đơn giản (ví dụ <
và &
tương ứng) mà sẽ làm cho những được trả lại theo nghĩa đen (không giải thích dưới dạng HTML) khi mà chuỗi mà sau đó sẽ được hiển thị như là một phần của một trang với Đánh dấu HTML. Hàm này filter_xss()
lọc một chuỗi HTML để ngăn các lỗ hổng cross-site-scripting (XSS). Nó làm bốn điều:
- 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 :)
Cả hai chức năng đều được sử dụng để vệ sinh dữ liệu từ người dùng để đảm bảo rằng mọi thao tác tiêm của người dùng đều được trung hòa trước khi dữ liệu được hiển thị trên trang web của bạn.
Bạn không bao giờ vượt qua cùng một chuỗi thông qua cả hai .
Nếu bạn sử dụng check_plain()
thì 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 (không phải HTML). Sau đó filter_xss()
là không cần thiết, vì check_plain()
sẽ luôn làm cho chuỗi văn bản đơn giản.
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()
sẽ làm rối tung nó.
Khi tôi nhìn vào mẫu mà bạn sử dụng làm ví dụ, có vẻ như cả ba trường được truyền đến print()
đều xuất phát từ nội dung đã được khử trùng và không cần vệ sinh nữa.
Tuy nhiên, nếu bạn tạo mô-đun riêng thu thập dữ liệu nhập của người dùng mà không chuyển qua bộ lọc văn bản "an toàn" như "HTML đã lọc" hoặc "Đồng bằng", bạn phải sử dụng các chức năng này cho mục đích vệ sinh.
filter_xss()
khi bạn muốn lọc XSS khỏi nội dung nguy hiểm tiềm tàng (tức là nội dung từ người dùng không tin cậy) vàcheck_plain()
khi bạn muốn thoát các ký tự đặc biệt HTML khỏi chuỗi