В чём разница между XSS и CSRF

В этой статье мы объясним различия между XSS и CSRF, и обсудим, могут ли токены CSRF предотвратить XSS атаки.

Межсайтовые сценарии/Межсайтовый скриптинг (XSS) позволяет злоумышленнику выполнять произвольный JavaScript код в браузере пользователя-жертвы.

Подделка межсайтовых запросов (CSRF) позволяет злоумышленнику побудить пользователя-жертву выполнить действия, которые он не намеревался совершать.

Последствия XSS уязвимостей, обычно, более серьёзны, чем последствия CSRF уязвимостей:

  • CSRF часто применяется только к подмножеству действий, которые может выполнить пользователь. Многие приложения реализую защиту от CSRF в целом, но упускают из вида одно или два действия, которые остаются незащищёнными. И наоборот, успешный XSS эксплойт обычно может побудить пользователя выполнить любое действие, которое пользователь может выполнить, независимо от функциональности, в которой возникает уязвимость.
  • CSRF можно описать как одностороннюю уязвимость, поскольку, хотя злоумышленник может побудить жертву выполнить HTTP-запрос, он не может получить ответ на этот запрос. И наоборот, XSS является двусторонней в том смысле, что внедрённый злоумышленниками сценарий может выдавать произвольные запросы, читать ответы и передавать данные во внешний домен по выбору злоумышленника.

Могут ли CSRF токены предотвратить XSS-атаки

Некоторые XSS-атаки действительно можно предотвратить за счёт эффективного использования CSRF токена. Рассмотрим простую Отражённую XSS-уязвимость, которую можно тривиально использовать следующим образом:

https://insecure-website.com/status?message=<script>/*+Bad+stuff+here...+*/</script>

Теперь предположим, что уязвимая функция включает в себя CSRF токен:

https://insecure-website.com/status?csrf-token=CIwNZNlR4XbisJF39I8yWnWX9wX4WFoz&message=<script>/*+Bad+stuff+here...+*/</script>

Если предложить, что сервер правильно проверяет токен CSRF и отклоняет запросы без валидного токена, тогда токен предотвращает использование XSS уязвимости. Подсказка здесь в названии: межсайтовые сценарии, по крайней мере, в его отражённой форме, включает межсайтовый запрос. Но позволяя злоумышленнику подделать межсайтовый запрос, приложение предотвращает тривиальное использование XSS уязвимости.

Здесь возникает несколько важных предостережений:

  • Если отражённая XSS уязвимость существует где-либо ещё на сайте внутри функции не защищённой CSRF токеном, то эту XSS можно использовать обычным способом.
  • Если где-либо на сайте существует XSS-уязвимость, которую можно использовать, её можно использовать, чтобы заставить пользователя-жертву выполнять действия, даже если эти действия сами по себе защищены CSRF токенами. В этой ситуации сценарий злоумышленника может запросить соответствующую страницу для получения действительного CSRF токена, а затем использовать токен для выполнения защищённого действия.
  • CSRF токена не защищают от сохранённых XSS уязвимостей. Если страница, защищённая CSRF токеном, также является точкой выводя для сохранённой XSS уязвимости, то эту XSS уязвимость можно использовать обычным способом, и полезная нагрузка XSS будет выполнять, когда пользователь посещает страницу.

Дополнительные материалы

Предыдущая Статья

Laravel API: Создание API

Следующая Статья

Тестирование конечных точек JSON:API с PestPHP