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