CSRF-защита с токенами в метатеге — почему ее нельзя украсть?

Рекомендация по включению токена предотвращения csrf в вызовы ajax заключается в том, чтобы включить их в качестве метатега на вашу страницу, к которому затем можно получить доступ и включить в заголовок. http://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/html/csrf.html

Как это нельзя использовать? Например, если example.com включает токен csrf в метатег, могу ли я просто создать вредоносный сайт с некоторым javascript, который будет вызывать example.com, а затем анализировать ответ, находить метатег, а затем ввести значение токена в форму моей вредоносной страницы?


person northernMonkey    schedule 06.03.2015    source источник


Ответы (2)


Токен CSRF уникален для каждого сеанса. После того, как он сгенерирован, он действителен для использования только один раз, привязанный к определенному сеансу.

Злоумышленник может сгенерировать его, но он будет привязан к сеансу его браузера. Короче говоря, они будут использовать его только для того, чтобы иметь возможность эксплуатировать самих себя.

Что касается создания атаки с помощью JavaScript, это действительно проблема, отдельная от CSRF. CSRF — это атака, подобная этой из Википедии:

<img src="http://bank.example.com/withdraw?account=Alice&amount=1000000&for=Mallory"/>

Защита от вредоносного JavaScript — это отдельная история. Сайты защищают себя от XSS и других типов внедрения JavaScript путем очистки пользовательского ввода, iframe песочницы, и полагаясь на политику того же происхождения.

TL;DR

Если вы используете на своем сайте чужой ненадежный JavaScript, то у вас проблемы посерьезнее, чем у CSRF.

person Dave    schedule 06.03.2015
comment
Я думал, что токен csrf уникален для каждого сеанса, поэтому каждый запрос в рамках сеанса будет иметь один и тот же токен? Ротация токенов не очень удобна для наших конечных пользователей, которые часто возвращаются в свой браузер. - person northernMonkey; 06.03.2015
comment
Кажется, ведутся споры о том, как часто следует использовать токены CSRF. обновляться, но я склонен согласиться с тем, что один раз за сеанс / вход в систему должно быть в порядке. Однако я упустил из виду ваш вектор атаки в вопросе - я обновил свой ответ для ясности и надеюсь, что теперь это приемлемый ответ. - person Dave; 06.03.2015

Сценарий, запущенный в браузере Алисы на chuck.com, не может прочитать содержимое carol.com из-за http://en.wikipedia.org/wiki/Same-origin_policy .

Сценарий на chuck.com может отправить сообщение на carol.com, но не может прочитать и проанализировать его содержимое.

person Neil McGuigan    schedule 06.03.2015