XSS: экранирование вывода и Sanitizer
Защита от межсайтового скриптинга реализуется экранированием пользовательских данных при выводе через \Bitrix\Main\Text\HtmlFilter::encode() или htmlspecialcharsbx(). Если требуется сохранить безопасное HTML-форматирование текста, входящий контент валидируется парсером CBXSanitizer по строгому белому списку разрешенных тегов и атрибутов.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Экранирование вывода
-
2
htmlspecialcharsEx()
-
3
Content Security Policy
-
4
Очистка HTML
-
5
Белые списки тегов
-
6
Фильтрация атрибутов
Материалы
Официальная документация
-
Санитайзер Новая дока
Проверь себя
Менеджер открыл самописный отчёт по заказам, и у него выполнился чужой скрипт. Где искать причину?
В шаблоне отчёта: поле заказа выведено без htmlspecialcharsbx() или HtmlFilter::encode(). Хранимый XSS срабатывает при повторном выводе данных, чаще всего на кастомных админских страницах, которые считают «своими».
Чем htmlspecialcharsEx() отличается от htmlspecialcharsbx() и почему дока советует первую избегать?
htmlspecialcharsEx() работает по чёрному списку и не трогает одинарную кавычку, поэтому атрибут в одинарных кавычках можно закрыть. htmlspecialcharsbx() экранирует полный набор спецсимволов.
Почему на странице появилось < вместо тега, хотя код экранирует один раз?
GetNext() старого API уже прогнал поля через htmlspecialcharsEx() и оставил сырые значения в ключах с тильдой. Экранировать нужно ~NAME, а NAME выводить как есть.
Что сломается, если санитайзер применять на выводе, а не при сохранении?
Скорость: CBXSanitizer разбирает HTML на каждом хите, на списке описаний это заметно. Зато при смене белого списка старые записи очищаются по новым правилам, а при санитизации на входе их придётся перечистить.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить