Выбор ответа Middle Безопасность фронтенда обновлено
Что не так с обработчиком postMessage
Вопрос
Что опасно в этом обработчике?
window.addEventListener('message', (e) => {
if (e.data.type === 'setToken') {
localStorage.setItem('token', e.data.token);
}
});
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Не проверяется e.origin: любое окно с доступом к странице подменит токен. Сообщения может прислать любое окно, у которого есть ссылка на ваше: родитель iframe, открывшая вкладка.
Варианты ответа
- Не проверяется
e.origin: любое окно с доступом к странице подменит токенправильный ответ localStorageнельзя вызывать внутри обработчика событий, запись не сохранится- Событие
messageне всплывает доwindow, поэтому обработчик не сработает - Нужно читать
e.detailвместоe.data, иначе придётundefined
Разбор
Сообщения может прислать любое окно, у которого есть ссылка на ваше: родитель iframe, открывшая вкладка. Без проверки e.origin по белому списку злоумышленник подставит свой токен. localStorage доступен в любом обработчике. Событие message приходит прямо на window, всплытие тут ни при чём. detail бывает у CustomEvent, у MessageEvent данные в data.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Безопасность фронтенда»
- Защита на уровне заголовков
- XSS и как от него защищаться
- CSP
- CSRF
- Site и origin
- XSS
- Защита от кликджекинга
- Защищает ли CORS от CSRF