Skip to main content

V5.3.2 Output Encoding and Injection Prevention

Requirement:#

Verify that output encoding preserves the user's chosen character set and locale, such that any Unicode character point is valid and safely handled. (C4)

Explanation:#

Продукт неправильно обрабатывает, если входные данные содержат кодировку Unicode

Remediation:#

Чтобы сохранить выбранный пользователем набор символов и языковой стандарт, важно правильно закодировать вывод таким образом, чтобы обеспечить безопасность приложения, а также сохранить целостность ввода пользователя. Вот пример того, как это сделать в Java:

String userInput = "ねこ";
// Get the user's preferred character set and locale
Charset charset = Charset.defaultCharset();
Locale locale = Locale.getDefault();
// Encode the user input for HTML
String encodedInput = URLEncoder.encode(userInput, charset.name());
// Write the encoded input to the response
response.setCharacterEncoding(charset.name());
response.setLocale(locale);
response.getWriter().println(encodedInput);

В этом примере метод Charset.defaultCharset() используется для получения предпочтительного набора символов пользователя, а метод Locale.getDefault() используется для получения предпочтительного языкового стандарта пользователя. Затем метод URLEncoder.encode() используется для правильного кодирования пользовательского ввода для HTML. Закодированный ввод затем записывается в ответ, при этом кодировка символов и языковой стандарт устанавливаются в предпочтительные значения пользователя. Это гарантирует, что пользовательский ввод будет правильно закодирован для отображения в приложении, а также сохранит выбранный пользователем набор символов и языковой стандарт. Важно отметить, что конкретная функция кодирования и используемые методы будут зависеть от языка программирования и контекста, но общий подход к сохранению выбранного пользователем набора символов и локали при правильном кодировании вывода остается прежним.

Additional:#

https://cwe.mitre.org/data/definitions/176.html