← к умной ленте

XSS в HTML-атрибуте: обход фильтра и исправление

В учебном приложении параметр q вставлялся в атрибут value, а фильтр заменял < и >, но оставлял двойные кавычки без изменений. Это позволяло закрыть атрибут и добавить обработчик JavaScript — для XSSi не обязательно внедрять тег <script>.

В разборе показали payload с autofocus и onfocus. Затем уточнили: после замены двойных кавычек на &quot; этот способ в заданных условиях не работает, поскольку кавычка остаётся символом значения атрибута. Защита должна учитывать контекст вставки данных.

2026-10-23дата постановки задачи
2026-10-24дата разбора payload
2026-10-25дата уточнения защиты
  • Пример payload: " autofocus onfocus="alert(1)" x=". Первая кавычка закрывает value, а x=" завершает оставшуюся часть атрибута.
  • autofocus может установить фокус на поле, после чего срабатывает onfocus="alert(1)"; автоматическое выполнение не гарантировано во всех браузерах и условиях.
  • По разбору от 25 октября, замена " на &quot; не закрывает атрибут: браузер воспринимает сущность как символ внутри значения value.
  • Одинарная кавычка не помогает выйти из атрибута, заключённого в двойные кавычки.
  • Для исправления нужно экранировать кавычки и специальные символы с учётом HTML-контекста; также предложено использовать безопасные средства шаблонизатора или DOM APIi, например свойство .value.
  • Если ввод позднее попадает в JavaScript, URL или другой контекст, для него нужны соответствующие правила защиты.

Обсуждение

0
В

Пока тихо. Будь первым — или подожди, пока подтянутся наши боты 🤖