В каком случае CSRF-освобождение может быть опасным? - PullRequest
10 голосов
/ 31 марта 2012

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

Я прочитал документы в django-docs (https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/) и некоторую информацию она этой странице: http://cwe.mitre.org/top25/#CWE-352

Насколько я понял, django предоставляет пользователю токен (своего рода пин-код).И чтобы убедиться, что это действительно он, он должен вернуть его в следующий раз, когда сделает запрос.А некоторые ребята из Google выяснили, что это возможно даже с помощью ajax-запросов, поэтому у нас есть новая политика их защиты, начиная с 1.2.6.И CSRF - это то, что кто-то дает мне что-то (плохой, опасный код, испорченные файлы или что-то в этом роде), притворяясь кем-то другим.

Так что, если у меня есть такой код:

@csrf_exempt    
def grab(request):
    """
    view to download an item
    POST because it stores that a user has downloaded this item
    """
    item_id = request.POST.get('item', None)
    if not loop: return HttpResponseBadRequest('no item id provided')
    item = Item.objects.get(pk=int(item_id))

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

Я также не понимаю, почему кто-то не может украсть CSRF-токен у пользователяи использовать его, чтобы все еще обмануть меня (или пользователя).Итак, у меня есть несколько вопросов по этой теме:

1) мои предположения сверху верны?

2) может кто-нибудь сказать мне, что (и, вероятно, как) какой-то не очень хороший парень мог бы использоватьприведенный выше взгляд на грязные трюки и какими они будут?

3) является CSRF примером атаки «человек посередине», это просто связано с ней или это нечто полностьюотличается?

4) Какие-нибудь ценные ссылки для дальнейшего чтения о таких опасностях?

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

Ответы [ 2 ]

9 голосов
/ 31 марта 2012

CSRF-атаки заставляют браузер жертвы отправлять поддельные запросы. Для этого достаточно простого <img> или автоматически отправленного <form> для метода GET и POST. И поскольку запросы отправляются браузером, он отправляет все учетные данные для проверки подлинности и, таким образом, делает запросы подлинными и законными с точки зрения сервера, поскольку они в основном не отличаются от тех, которые инициированы действиями пользователя.

И это именно то, для чего используется токен CSRF: установите различие между запросами, инициированными пользователем, и запросами, которые были подделаны сторонним сайтом. Для этого токен CSRF действует как секрет, который известен только серверу и пользователю. Сервер помещает секрет в документ в ответ и ожидает его отправки в следующем запросе.

А поскольку секрет встроен в документ ответа, который назначен этому конкретному пользователю, злоумышленнику потребуется подслушать этот конкретный ответ или получить доступ к документу другим способом. Там, безусловно, атаки получают токен CSRF (например, прослушивание , MITM , XSS и т. Д.). Но если вы защищены от этих атак, злоумышленник не сможет подделать подлинный запрос.

7 голосов
/ 07 августа 2015

CSRF атака

Я заставляю вас просматривать веб-страницу, где я вставил некоторый код (запрос, обычно через img или form) на другой сайт (где у вас, возможно, есть некоторые права).

Безобидный пример

<img src="http://www.yoursite.net/changelanguage?lang=fr">

Я жестоко изменил язык вашей сессии на французский. О нет! Вы можете безопасно снять защиту csrf и сохранить удар по БД.

Опасные примеры

<img src="http://www.yourbank.net/sendmoney?amt=9999&account=123>

Если вы вошли в yourbank.net (и у него нет csrf или какой-либо другой защиты), ваша учетная запись должна выглядеть легче. (Мне 123 года.)

<img src="http://www.yoursite.net/admin/users/123/edit?admin=1">

Если вы вошли в yoursite.net как администратор, то мы оба. (Мне 123 года.)

...