Этот вопрос скорее перестраховочный, чем один непосредственно о том, как закодировать. В качестве автодидакта у меня не было много возможностей задавать профессионалам такие вещи, поэтому я пробую здесь.В каком случае может быть освобожден CSRF?
Я прочитал документы в Джанго докторантов (https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/) и некоторую информацию на этой странице: http://cwe.mitre.org/top25/#CWE-352
Насколько я понял, Джанго поставляет маркер (своего рода пин-кода) к пользователь. И проверить, действительно ли это он, он должен вернуть его в следующий раз, когда он сделает запрос. И некоторые ребята из 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) Какие-либо ценные ссылки для дальнейшего изучения таких опасностей?
Возможно, некоторые из этих вопросов звучат не слишком хорошо, но я пытаюсь преодолеть это. Я был бы очень рад, если бы кто-то мог мне помочь.
В конце туннеля появляется тусклый свет ... Так что, если бы я хотел отправить злое на сервер, мне сначала пришлось бы отправить некоторые данные в какой-нибудь браузер пользователей. В этих данных я скрываю некоторую автоматическую форму отправки, которая отправляется на сервер для атаки. Я предполагаю, что пользователь зашел на этот сервер, потому что у него есть учетная запись. И если сервер не будет проверять какой-то токен, ему просто нужно будет полагать, что запрос был законным. По крайней мере, у меня теперь есть идея, как это работает, и где рисовать линию для MIM и XSS. Спасибо за это. – marue
@marue CSRF не собирается отправлять вредоносные данные на сервер. В первую очередь это касается олицетворения, так как атакующий сайт может отправлять законные и аутентичные запросы от имени жертвы. Подслушивание, MITM и XSS - это только средство, чтобы получить доступ к токенам CSRF для смягчения (хотя, поскольку большинство схем управления аутентификацией используют сеансы на основе файлов cookie, вы также можете получить идентификатор сеанса). – Gumbo
Итак, CSRF - это все и «только» о том, чтобы притворяться кем-то, кем вы не являетесь? Где только не означает, что это не важно, но все остальное - это другой вектор атаки. – marue