Зачем мне библиотека XSS, если я могу использовать Html-кодирование?

Я пытаюсь понять, зачем мне использовать библиотеку XSS, когда я могу просто сделать HtlEncode при отправке данных с сервера на клиент...?

Например, здесь, в редакторе Stackoverflow.com, все, что нужно сделать элементу SO, — это сохранить введенные пользователем данные и отобразить их с кодировкой html.

Таким образом, никогда не будет тега HTML, который будет выполняться.

Я, вероятно, ошибаюсь здесь, но не могли бы вы опровергнуть мое утверждение или объяснить?

Например :

Я знаю, что тег IMG, например, может иметь onmouseover, onload, которые пользователь может выполнять вредоносные скрипты, но IMG не будет запускаться в браузере как IMG, поскольку это &lt;img&gt;, а не <img>

Итак - где проблема?


person d11    schedule 17.04.2014    source источник
comment
если вы кодируете вывод, защищающий от XSS... кто сказал, что вам нужна XSS-библиотека?   -  person Marty    schedule 17.04.2014
comment
Нужна дополнительная информация, добавляющая к моему ответу, чтобы помочь вам?   -  person SilverlightFox    schedule 29.07.2014


Ответы (2)


HTML-кодирование само по себе является одной из функций, которую может предоставить «библиотека XSS». Это может быть полезно, когда платформа не имеет встроенного HTML-кодировщика (например, JSP на основе сценариев) или собственный HTML-кодировщик не подходит (например, не экранирует кавычки для использования в атрибутах, или ]]>, если вы используете XHTML, или @{} если вы беспокоитесь об атаках с включением таблицы стилей из разных источников).

Также могут быть другие кодировщики для других ситуаций, например, вставки в строки JavaScript в блоке <script> или параметры URL в атрибуте href, которые не предоставляются непосредственно платформой/языком шаблонов.

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

Другой менее полезной функцией, которую может предоставить библиотека XSS, может быть автоматическое сканирование и фильтрация ввода для специальных символов HTML. Может быть, это та функция, против которой вы возражаете? Конечно, попытка справиться с HTML-инъекцией (проблема на этапе вывода) на этапе ввода является ошибочным подходом, который средства безопасности не должны поощрять.

person bobince    schedule 17.04.2014

Кодирование HTML — это только один из аспектов защиты вывода от XSS. .

Например, если вы выводите строку в JavaScript, используя этот код:

<script>
  var enteredName = '<%=EnteredNameVariableFromServer %>';
</script>

Вам понадобится шестнадцатеричная сущность, кодирующая переменную для правильной вставки в JavaScript, а не HTML-код. Предположим, что значение EnteredNameVariableFromServer равно O'leary, тогда отрендеренный код при правильном кодировании станет:

<script>
  var enteredName = 'O\x27leary';
</script>

В этом случае это предотвращает выход символа ' из строки в контекст кода JavaScript, а также обеспечивает правильную обработку переменной (кодирование HTML приведет к тому, что буквальное значение O&#39;leary будет использоваться в JavaScript, что повлияет на обработку и отображение стоимости).

Примечание:

Кроме того, это не совсем верно для переполнения стека. Некоторые символы по-прежнему имеют особое значение, например, в теге <!-- language: lang-none -->. См. этот пост о подсветке синтаксиса, если вам интересно.

person SilverlightFox    schedule 18.04.2014