Czy check_plain () wystarczy?

16

Czy check_plain () wystarcza do ponownego wyświetlenia tekstu wprowadzonego przez użytkowników w przeglądarce, czy powinienem nadal filtrować za pomocą filter_xss () ?

Citricguy
źródło

Odpowiedzi:

26

Wyobrażam sobie, że pytanie dotyczy użycia check_plain(filter_xss($string))lub filter_xss(check_plain($string)).

check_plain()i filter_xss()mają dwa różne, przeciwnie, cele:

  • check_plain() koduje znaki specjalne w postaci ciągłego tekstu, który jest następnie wyświetlany jako HTML.
  • filter_xss()filtruje ciąg HTML, aby zapobiec lukom w zabezpieczeniach XSS. W szczególności jego celem jest:

    • Usuwanie postaci i konstrukcji, które mogą oszukać przeglądarki
    • Upewnij się, że wszystkie jednostki HTML są poprawnie sformułowane
    • Upewnij się, że wszystkie tagi i atrybuty HTML są poprawnie sformułowane
    • Upewnienie się, że żadne tagi HTML nie zawierają adresów URL z niedozwolonym protokołem (np. Javascript :)

Jeśli używasz check_plain(), ciąg przekazany do funkcji powinien być używany jako zwykły tekst; w takim przypadku filter_xss()nie jest to konieczne. Jeśli używasz filter_xss(), to ciąg znaków przekazywany do funkcji powinien mieć format HTML i check_plain()nie jest konieczny.

Jeśli pytanie dotyczy użycia check_plain()i filter_xss()na różnych częściach tego samego ciągu, to, jak wskazał Greggles w swoim komentarzu, możesz użyć (na przykład) check_plain()zawartości atrybutów tagu i filter_xss()całego tagu HTML.

kiamlaluno
źródło
5
filter_xss jest przeznaczony do użycia na całych kawałkach HTML. Jeśli użyjesz filter_xss dla atrybutu HTML, nie będzie go poprawnie filtrował. check_plain może służyć do bezpiecznego filtrowania atrybutów HTML. Zobacz także drupalscout.com/knowledge-base/… i drupalscout.com/knowledge-base/…, aby uzyskać więcej informacji na temat korzystania z tych funkcji.
greggles