Почему я должен конвертировать & в предотвращение XSS?

Недавно я думал о вопросе, как я упоминаю в заголовке.

Как советует нам OWASP в своем ПРАВИЛЕ №1, нужно выполнить некоторые Экранирование HTML перед вставкой пользовательского ввода в HTML-страницы.

Однако в следующих случаях:

‹тег›userInput‹/тег›

‹tag attribute="userInput"›‹/tag›

Если я экранирую только 4 символа: ‹ > ' ", но не &, может ли какая-либо полезная нагрузка вызвать XSS? Обратите внимание, что в userInput не удалось закрыть атрибут.

Или есть ли случаи, когда символ & должен быть экранирован, иначе будут существовать уязвимости XSS?


person z3tt4    schedule 08.05.2018    source источник


Ответы (1)


Вот что вы должны учитывать:

&lt; это <, а &gt; это >

Вы можете видеть, что & используется для обозначения точки выхода.

Поэтому, если вы хотите ввести & вместо &amp;, браузеры (парсер) могут рассматривать это как точку выхода.

Вот почему вам нужно использовать &amp; вместо &.

person Hasibul Hasn    schedule 08.05.2018
comment
Спасибо за ваш ответ, однако я до сих пор не могу понять, существует ли какая-либо уязвимость, позволяющая пользователю вводить символы &. Это выход, но я считаю, что он не может позволить вводить новый тег или атрибут. Или я делаю какую-то ошибку? - person z3tt4; 08.05.2018
comment
& не открывает никакой уязвимости xss. но вы должны избежать его, чтобы избежать беглеца. - person Hasibul Hasn; 08.05.2018
comment
Но вы должны учитывать это & в своем бэкэнд-коде. предположим, что вы запускаете команду в своей системе с помощью пользовательского ввода. так что whoami && sudo rm -rf /* здесь риск. побег и дезинфекция - единственный способ предотвратить это. - person Hasibul Hasn; 08.05.2018