В каком случае освобождение от CSRF может быть опасным?

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

Я прочитал документы в 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) Любые ценные ссылки для дальнейшего чтения о таких опасностях?

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

10
задан marue 31 March 2012 в 13:39
поделиться