Достаточно ли check_plain ()?

Ответы:

26

Я полагаю, что вопрос об использовании check_plain(filter_xss($string))или filter_xss(check_plain($string)).

check_plain()и filter_xss()имеют две разные и, напротив, цели:

  • check_plain() кодирует специальные символы в виде простой текстовой строки, которая затем отображается в виде HTML.
  • filter_xss()фильтрует строку HTML для предотвращения уязвимостей межсайтового скриптинга (XSS). В частности, его целью является:

    • Удаление символов и конструкций, которые могут обмануть браузеры
    • Убедиться, что все объекты HTML правильно сформированы
    • Убедитесь, что все HTML-теги и атрибуты правильно сформированы.
    • Убедитесь, что HTML-теги не содержат URL-адресов с запрещенным протоколом (например, javascript :)

Если вы используете check_plain(), строка, переданная функции, должна использоваться как простой текст; в таком случае filter_xss()не нужно. Если вы используете filter_xss(), то строка, передаваемая функции, должна быть HTML и check_plain()не обязательна.

Если речь идет об использовании check_plain()и filter_xss()в разных частях одной и той же строки, то, как указал григгл в своем комментарии, вы можете использовать (например) check_plain()содержимое атрибутов тега и filter_xss()весь тег HTML.

киамалуно
источник
5
filter_xss предназначен для использования на целых кусках HTML. Если вы используете filter_xss для атрибута html, он не будет правильно фильтровать его. check_plain может использоваться для безопасной фильтрации атрибутов HTML. Смотрите также drupalscout.com/knowledge-base/… и drupalscout.com/knowledge-base/… для получения дополнительной информации об использовании этих функций.
григглс