2016-06-24 2 views
0

Я использовал requests для отправки запроса.Django: почему CSRF_COOKIE в запросе.META

import requests 

def print(req): 
    print('{}\n{}\n{}\n\n{}'.format(
     '-----------START-----------', 
     req.method + ' ' + req.url, 
     '\n'.join('{}: {}'.format(k, v) for k, v in req.headers.items()), 
     req.body, 
    )) 
    print "----------END------------" 

try: 
    req = requests.Request('GET', 
      'https://myip/myproject/upload/token', 
      headers={'Authorization': 'Token 401f7ac837a', 
      }) 
    prepared = req.prepare() 
    print(prepared) 
except Exception as e: 
    print "Exception:", e 

Выход:

-----------START----------- 
GET https://myip/myproject/upload/token 
Authorization: Token 401f7ac837a 

None 
----------END------------ 

Но после того, как я напечатал request.META, есть

META:{u'CSRF_COOKIE': u'YGzoMaNEQJz1Kg8yXAwjJt6yNuT9L' 

Что установить CSRF_COOKIE? Любые комментарии приветствуются. Благодаря

UPDATE

(1) Из doc, он сказал Это печенье устанавливается CsrfViewMiddleware, что означает, что куки CSRF были установлены в фоновом и установите передний конец в ответ (CSRF cookie: server -> browser). Почему он также сказал Для всех входящих запросов, которые не используют HTTP GET, HEAD, OPTIONS или TRACE, должен присутствовать файл cookie CSRF? И почему это появляется в моей просьбе. МЕТА? (CSRF cookie: browser -> server ???)

(2) Он сказал ** Поле скрытой формы с именем «csrfmiddlewaretoken» присутствует во всех исходящих POST-формах. Значение этого поля - это значение cookie CSRF.

Эта часть сделана тегом шаблона. **

Когда и как это делает тег шаблона?

ответ

0

Это стандартное приложение для создания файлов cookie Django для каждого нового пользователя, чтобы предотвратить перекрестное крепление сайта.

CSRF печенье, который устанавливается на случайное значение (сессионный независимый нонса, как это называется), что другие сайты не будут иметь доступ.

Этот файл cookie установлен CsrfViewMiddleware. Он должен быть постоянным, , но поскольку нет способа установить cookie, который никогда не истекает, это отправлено с каждым ответом, который вызвал django.middleware.csrf.get_token() (функция, используемая внутренне для retrieve токен CSRF).

По соображениям безопасности, значение куки CSRF изменяется каждый раз, когда пользователь входит в систему.

для более чтения

https://docs.djangoproject.com/en/1.9/ref/csrf/#how-it-works

+0

Спасибо. Что генерирует и устанавливает CSRF_COOKIE? – BAE