Выбор ответа Middle Код-ревью обновлено

Опасность в комментарии пользователя

Вопрос

Что здесь опаснее всего?

function Comment({ comment }: { comment: { html: string } }) {
  return <div dangerouslySetInnerHTML={{ __html: comment.html }} />;
}

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: XSS: пользовательский HTML вставляется без санитизации. dangerouslySetInnerHTML с данными пользователя позволяет внедрить, например, <img src=x onerror=... и выполнить скрипт от имени жертвы.

Варианты ответа

  1. Лишний div, который ломает семантику разметки
  2. Отсутствие memo: компонент рендерится заметно чаще нужного
  3. Отсутствие aria-label у блока с контентом
  4. XSS: пользовательский HTML вставляется без санитизацииправильный ответ

Разбор

dangerouslySetInnerHTML с данными пользователя позволяет внедрить, например, <img src=x onerror=...> и выполнить скрипт от имени жертвы. Нужно рендерить текст обычным JSX или, если разметка нужна, санитизировать её (DOMPurify) и дополнительно настроить CSP. Остальные пункты в лучшем случае мелочи, а безопасность блокирует мерж.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.