Как и когда использовать filter_xss () и check_plain ()?

11

На views-view-fields--magazine--magazine.tpl.phpмоем веб-сайте много таких шаблонов, как этот . как и когда я должен использовать filter_xss () и check_plain () для повышения безопасности? например, это код:

<div>
    <div class="bf-header bf-article-header"><?php print $fields['title']->content; ?></div>
    <div class="bf-article-body"><?php print $fields['field_magazine_body']->content;?></div>
    <div class="bf-article-image"><?php print $fields['field_magazine_image']->content;?></div>
</div>
<div class="separator article-view-separator"></div>

Как я могу применить эти функции в нем?

М ама Д
источник
Используется, filter_xss()когда вы хотите отфильтровать XSS от потенциально опасного контента (то есть контента от ненадежного пользователя) и check_plain()когда вы хотите экранировать специальные символы HTML из строки
Clive

Ответы:

13

Сначала прочитайте об этом в Drupal API:

Таким образом, check_plain()кодирует специальные символы, которые имеют особое значение в HTML (например, <и &), в простые текстовые объекты (то есть &lt;и &amp;соответственно), которые будут переводить их буквально (не интерпретировать как HTML), когда эта строка затем отображается как часть страницы с HTML-разметка. Функция filter_xss()фильтрует строку HTML для предотвращения уязвимостей межсайтового скриптинга (XSS). Это делает четыре вещи:

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

Обе функции используются для очистки данных от пользователей, чтобы убедиться, что любое внедрение пользователя нейтрализуется до того, как данные будут представлены на вашем сайте.

Вы никогда не пропустите одну и ту же строку через оба .

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

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

Когда я смотрю на шаблон, который вы используете в качестве примера, мне кажется, что все три передаваемых поля print()получены из содержимого, которое уже очищено и не нуждается в дополнительной очистке.

Однако если вы создаете свой собственный модуль, который собирает пользовательский ввод, не пропуская его через «безопасный» текстовый фильтр, такой как «Фильтрованный HTML» или «Простой», вы должны использовать эти функции в целях санитарии.

Свободный радикал
источник
Где я могу проверить входные данные от пользователей? например, существует тип контента, и анонимные пользователи могут создавать такие узлы.
М ам D
@Drupalist, вы никогда не должны позволять анонимному пользователю использовать «небезопасный» текстовый формат. Перейдите к Администрированию »Конфигурация» Создание контента »Форматы текста . «Безопасные» форматы текста, которые поставляются с Drupal, это «Фильтрованный HTML» и «Простой текст». Если это единственные форматы, разрешенные для анонимного пользователя, Drupal выполняет необходимые проверки для вас для любого встроенного типа узла и любого типа узла, который вы создаете с помощью базовой функции Fields . Если ваш вариант использования отличается от этого, задайте новый вопрос с описанием варианта использования.
Свободный радикал
Анонимным пользователям разрешено использовать толькоplain text
M ama D
@Drupalist, это нормально. Нет необходимости использовать эти функции для очистки обычного текста.
Свободный радикал
3
@ARUN, нет. Стандартная практика Drupal - всегда сохранять именно то, что пользователь вводит в БД, и очищать текст перед рендерингом.
Свободное Радикальное