Чи достатньо 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/… для отримання додаткової інформації про використання цих функцій.
греглася
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.