2016-09-16 16 views
1

Я читал другие вопросы на переполнение стека, но не нашел четкого ответа на этот вопрос:Кража CSRF токен

Что мешает злоумышленнику украсть токен CSRF пользователя с помощью JS? Разве он не может просто найти элемент CSRF и получить его значение с помощью JS?

Я не очень хорошо знакомы с JS, но, возможно, что-то вроде этого:

document.getElementById("csrft_token").value 
+0

У вас есть пример JS, который сможет украсть его при тех же условиях, где он сможет выполнить CSRF? Обратите внимание на ** C ** в CSRF. – the8472

+0

И как ваш злоумышленник получает код JS, выполненный на этом конкретном веб-сайте? – CBroe

+0

Если третья сторона может выполнить произвольный Javascript на вашем сайте, у вас гораздо хуже проблем, чем csrf. Это похоже на вопрос: «Какой смысл в замке на моей двери, если плохой парень уже сбил стену?» –

ответ

4

От OWASP (https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF) )

Cross-Site Request подлог (CSRF) это нападение, что силы конечный пользователь для выполнения нежелательных действий в веб-приложении, в котором они в настоящее время аутентифицированы. Атаки CSRF специально предназначены для запросов, изменяющих состояние, а не кражи данных, поскольку злоумышленник не имеет возможности увидеть ответ на поддельный запрос. С небольшой помощью социальной инженерии (например, при отправке ссылки по электронной почте или в чате) злоумышленник может обмануть пользователей веб-приложения в выполнении действий выбора злоумышленника. Если жертва является обычным пользователем, успешная атака CSRF может заставить пользователя выполнять запросы на изменение состояния, такие как перенос средств, изменение их адреса электронной почты и т. Д. Если жертва является учетной записью администратора, CSRF может поставить под угрозу все веб-приложение.

Вектор атаки CSRF по определению не находится на том же сервере, что и атакуемый сервер, поэтому он не имеет доступа к этой информации.

Рудиментарный пример:

Жертва - Боб

сайта - foo.com

Атакующий - Джон

Джон не имеет доступа к foo.com, но у него есть доступ к Бобу , либо через веб-сайт, либо по электронной почте. Он знает, как работает foo.com, поэтому он может связывать запрос либо с электронным письмом, либо с вредоносным веб-сайтом, который не находится в домене foo.com. Это отправит запрос и подтвердит учетные данные Боба.

Политика одного и того же происхождения не позволяет Джону увидеть или перехватить что-либо из версии Bob's foo.com, поэтому ключ CSRF можно сохранить на странице, которую Боб получает с сайта foo.com, даже не увидев Джона.

Если бы Джон смог использовать JS, чтобы фактически увидеть токен, это означало бы, что у Джона есть доступ к запросам от foo.com, и в этом случае это будет либо человек в середине или внутри человека атака.

В принципе, цель ключа CSRF заключается в том, чтобы остановить атаку CSRF. Если сам ключ CSRF перехвачен, произошла другая атака.

1

Короткий ответ: Одинаковая политика происхождения. Поскольку злоумышленник будет обслуживать свой вредоносный сценарий из другого источника, его сценарий не может читать данные, содержащиеся в другом источнике (например, токен).

Однако, если сайт, содержащий токен, обладает уязвимостью XSS, и злоумышленник использует это для загрузки своего сценария, происхождение будет соответствовать, и он действительно сможет украсть свой токен.

Смежные вопросы