V5.3.3 Output Encoding and Injection Prevention
Requirement:#
Verify that context-aware, preferably automated - or at worst, manual - output escaping protects against reflected, stored, and DOM based XSS. (C4)
Explanation:#
Продукт не экранирует или неправильно экранирует контролируемый пользователем ввод перед его размещением в выходных данных, которые используются в качестве веб-страницы, обслуживаемой другим пользователям.
Remediation:#
Для защиты от отраженных, сохраненных и основанных на DOM XSS-аттак важно использовать контекстно-зависимое экранирование вывода. Это означает, что механизм экранирования вывода должен быть специфичным для контекста, в котором будут отображаться введенные пользователем данные. Вот пример того, как это сделать в PHP:
В этом примере функция htmlspecialchars() используется для экранирования пользовательского ввода для HTML. Второй аргумент, ENT_QUOTES, указывает, что следует экранировать как одинарные, так и двойные кавычки, а третий аргумент, UTF-8, задает кодировку символов UTF-8. Затем экранированный ввод записывается на страницу, что защищает от отраженных XSS-атак. Если пользовательский ввод хранится в базе данных, его также следует экранировать перед сохранением, чтобы защитить от хранимых XSS-атак. Для защиты от атак XSS на основе DOM важно также проверять и фильтровать вводимые пользователем данные перед их использованием в JavaScript или другом коде на стороне клиента. Это можно сделать с помощью ручной проверки и очистки или с помощью платформы или библиотеки JavaScript, которые предоставляют встроенные функции безопасности. Важно отметить, что экранирование вывода — это лишь часть защиты от XSS, и комплексная стратегия безопасности должна также включать проверку и очистку ввода, а также другие меры безопасности, такие как контроль доступа, безопасная связь и регулярные проверки безопасности.
Additional:#
https://cwe.mitre.org/data/definitions/79.html
https://cheatsheetseries.owasp.org/cheatsheets/DOM_based_XSS_Prevention_Cheat_Sheet.html