Кажется, я неправильно понимаю CSRF? - PullRequest
7 голосов
/ 01 сентября 2011

После прочтения многих документов, касающихся CSRF, я все еще немного растерялся.Поэтому я надеюсь, что кто-то может объяснить мне это:

  1. Допустим, если у меня есть страница профиля, предназначенная только для аутентифицированных пользователей, скажем, abc.com/profile, где отображаются все мои личные данные.Информация.Если я вошел в систему, а затем зашел на «плохой» сайт, может ли этот сайт каким-то образом получить и проанализировать страницу моего профиля?(Я немного поработал, открыв консоль firebug на другом сайте, затем запросив страницу своего профиля, и мне кажется, что, по крайней мере, я вижу весь контент в «ответе» на вкладке «Сеть», не понялузнать, как получить и проанализировать этот контент. Но, возможно, это возможно?)

  2. Теперь предположим, что у меня на странице профиля есть форма, которая, конечно, имеет токен csrf.Теперь, если злоумышленник может получить мою профильную страницу, он может просто проанализировать это содержимое, получить маркер и отправить поддельную форму?

  3. Теперь предположим, что 1 и 2 верны, что я долженсделать, чтобы такие случаи не происходили?

Ответы [ 3 ]

9 голосов
/ 01 сентября 2011

Ваши очки не совсем верны ... Но возьмите этот сценарий.

Пример атаки


Представьте, что пользователь вошел в Официальный банк поддельной страны - GoodBank.com и имеет баланс в 1 000 000 золота.

На MaliciousSite.com существует <img> или какой-либо другой универсальный JavaScript, который заставляет вас сделать запрос на GoodBank.com.

<img> имеет src из http://www.goodbank.com/account/transfer.php?amount=10000&sentTo=malicioususer.


Теперь этот сайт сделал запрос под вашей учетной записью пользователя и заставил вас открыть страницу, которой у вас не было бы в противном случае.

Теперь вы можете подумать, что вы можете защитить от этого, используя только POST, но они также не безопасны. Правильный способ заключается в использовании токенов CSRF в ваших формах, и при отправке формы вы должны убедиться, что полученный токен CSRF совпадает с тем, который был выдан.

Не используйте эти меры для защиты себя :

  • Секретное печенье
  • Принимаются только POST-запросы
  • Многостраничные формы
  • перезапись URL

Вместо этого используйте токен, подобный этому:

<form action="/transfer.do" method="post">
  <input type="hidden" name="CSRFToken" value="OWY4NmQwODE4ODRjN2Q2NTlhMmZlYWEwYzU1YWQwMTVhM2JmNGYxYjJiMGI4MjJjZDE1ZDZjMTVi
  MGYwMGEwOA==">
  …
  </form>

Смотрите здесь для лучшего объяснения: Шпаргалка CSRF

6 голосов
/ 01 сентября 2011

Ваш первый пункт неверен.
Невозможно прочитать содержимое из другого домена на клиенте.

Поэтому враждебный сайт не может прочитать токен CSRF.

Вы можетеотправлять запросы в другой домен (что и делают атаки CSRF), но вы не можете прочитать ответы.

1 голос
/ 10 сентября 2013

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

Возьмите следующий сценарий.

Форма используется для обновления информации о пользователе.

<script>
...
var userID=getUserId();//method makes AJAX call to get user ID
...
</script>
...
<form name="UpdateUserProfile">
   <input type='hidden' id='userId' value='userID_attacker_cannot_guess'>
   <input type='hidden' id='userName' value='goodUser'>
   <input type='hidden' id='email' value='goodUser@goodsite.com'>
    ...
 </form>

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

Но если злоумышленник может прочитать значение userID, используя XSS-атаку, он может затем создать поддельный запрос, включив в него правильный идентификатор пользователя.

Хотя XSS не нужен для CSRF-атак, это облегчит задачу.

Проверьте следующие ресурсы.

Подделка межсайтовых запросов (CSRF) -OWASP

Межсайтовый скриптинг (XSS) -OWASP

...