EMZETT.
Войти

XSS (cross-site scripting)

Коротко: Атака, при которой чужой код JavaScript выполняется на доверенном сайте в браузерах других посетителей — обычно потому, что страница выводит ввод без проверки как HTML.

Подробнее: Злоумышленник внедряет код через форму, комментарий или ссылку. Если страница позже показывает его другим пользователям, код выполняется с их правами: он может красть сеансы, запускать действия от имени жертвы или подделывать содержимое. Различают хранимый XSS (код постоянно лежит в базе данных), отражённый XSS (код в ссылке) и DOM-based XSS (ошибка в браузерном скрипте).

Наш контекст: React по умолчанию экранирует текст. Немногие места с dangerouslySetInnerHTML (новостные статьи, метаданные вики, JSON-LD) выводят только очищенное содержимое: HTML от администраторов очищается при сохранении по спискам разрешений/запретов, JSON-LD проходит через защитную функцию. Предпросмотр в редакторе находится в iframe с sandbox, где скрипты не выполняются.

Подробности

Меры защиты

  1. Экранировать вывод: никогда не выводить ввод пользователя как HTML (фреймворки делают это).
  2. Использовать CSP.

См. также: CSP, SQL-инъекция, cookie