Skip to main content

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:

Экранирование ввода
// Get the user-supplied data
$userInput = $_GET['userInput'];
// Escape the user input for HTML
$escapedInput = htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
// Write the escaped input to the page
echo $escapedInput;

В этом примере функция 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