Этот вопрос скорее перестраховывается, чем непосредственно о том, как закодировать. В качестве автодидакта у меня не было много возможностей задавать профессионалам такие вещи, поэтому я пробую здесь.
Я прочитал документы в 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) Какие-нибудь ценные ссылки для дальнейшего изучения таких опасностей?
Возможно, некоторые из этих вопросов звучат не слишком хорошо, но я пытаюсь это преодолеть. Я был бы очень рад, если бы кто-то помог мне.