Уязвимость CSRF / вопрос о cookie

Просто хочу быть введенным от людей, которые знают. Я рассматривал уязвимости CSRF, и по-видимому самый популярный метод, который я знаю для борьбы против него. Тот метод должен создать маркер в возвращенном HTML и добавлении cookie с тем же значением. Таким образом, если сценарий пытается сделать сообщение, они были бы have to guess the token thats embedded in the web page чтобы это было успешно.

Но если они предназначаются для определенного веб-сайта, почему они не могут только использовать сценарий это

  1. Называет получение на странице (cookie будет возвращен даже при том, что сценарий не может получить доступ к нему),
  2. Анализирует HTML и получает маркер
  3. Называет сообщение с тем маркером в нем (cookie, который возвратился, будет передан обратно),
  4. Они успешно отправили форму без пользовательского ведома

Сценарий не должен знать содержание cookie, он просто использует то, что cookie отправляются назад и вперед все время.

Что я пропускаю здесь? Разве это не возможно? Я думаю, что это довольно страшно, если Вы думаете об этом.

Ниже этой строки не требуется, читая для ответа на вопрос :)

Эта уязвимость полагается на то, что аутентификация сделана на основе cookie, которые я думаю, основной способ, которым в настоящее время происходит аутентификация.

Другое решение, о котором я могу думать, заставляет аутентификацию быть на уровне страницы. Таким образом, когда они входят в систему, возвращенный HTML будет иметь тот маркер в нем. каждая ссылка, на которую они нажимают, содержит тот маркер поэтому, когда веб-сервер получает запрос, это имеет способ идентифицировать пользователя/сессию. Проблема с ним состоит в том, что, если они используют какую-либо навигацию, кроме которой они будут 'не аутентифицироваться' (например, тип в URL), также это не выглядит хорошим в URL, потому что это, вероятно, выглядело бы примерно так:

https://www.example.com/SuperSecretPage/1/123j4123jh12pf12g3g4j2h3g4b2k3jh4h5g55j3h3

Но я действительно понимаю что, если безопасность более важна, то симпатичный URL является вторым местом.

Я не знаю все о cookie, но что, если агенты пользователя были немного более осторожными со своими cookie?

Например, что, если отправленные cookie зависели от вкладки? Все мы перемещаемся по вкладкам использования к настоящему времени, правильно? таким образом, что, если объемом cookie была вкладка? таким образом, если у меня есть свой банковский сайт, открытый на вкладке 1, и я являюсь перемещающимся на вкладке 2, любой вызов сценариев получает/отправляет на вкладке 2, только отправит cookie, накопленные на вкладке 2.

Или что, если cookie были сохранены / домен. Таким образом, в то время как я нахожусь на example.com любые cookie, которые возвращаются, входят в набор cookie example.com. и затем когда я нахожусь на www.mybankingsite.com, все cookie помещаются в набор mybankingsite.com. Таким образом, если я перейду к example.com, и это запускает скрипт, который звонит, то получение/отправление агента пользователя только отправит cookie example.com. Это отличается, чем отправка cookie требуемого домена. Например, если сценарий назовет получение mybankingsite.com в веб-странице example.com, то агент пользователя не отправит cookie mybankingsite.com.

Я знаю, что не имею никакого контроля над тем, что делают агенты пользователя, но я просто исследую возможности

5
задан Jose 24 June 2010 в 13:28
поделиться

3 ответа

Итак, я думаю, что проблема здесь заключается в попытке злоумышленника получить содержимое страницы. Чтобы получить страницу аутентифицированного пользователя, злоумышленник должен иметь возможность отправить запрос от его имени и прочитать содержимое. AJAX не будет отправлять междоменные запросы, фреймы не позволят вам прочитать ответ. Я изо всех сил пытаюсь придумать другие способы, которыми злоумышленник первым получит содержимое.

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

4
ответ дан 14 December 2019 в 08:42
поделиться

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

На сайте: www.badguy.com/ напишите следующий html

img src = "www.goodguy.com/secure/user/delete/5">

Что это делает Итак, администратор переходит на сайт www.badguy.com/, и изображение отправляет запрос на www.goodguy.com/secure/user/delete/5 из браузера пользователя, поэтому администратор просто случайно удалил пользователя. Если вы создадите петлю, у вас проблемы. Ожидайте, что я никогда не удаляю данные, просто меняю их статус :) но все равно мне это не нравится.

2
ответ дан 14 December 2019 в 08:42
поделиться

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

1
ответ дан 14 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: