Публикация Iphone на веб-сервере django выдает ошибку проверки csrf - PullRequest
0 голосов
/ 11 января 2012

Я пытаюсь создать приложение для iphone, которое будет проверять логин пользователя.

Однако, когда я передал имя пользователя и пароль и распечатал журнал jsonString, который он получает из Интернета,

Я получаю следующую ошибку:

<code>2012-01-11 13:44:51.470 Different Views[53942:18903] 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="robots" content="NONE,NOARCHIVE">
  <title>403 Forbidden</title>
  <style type="text/css">
    html * { padding:0; margin:0; }
    body * { padding:10px 20px; }
    body * * { padding:0; }
    body { font:small sans-serif; background:#eee; }
    body>div { border-bottom:1px solid #ddd; }
    h1 { font-weight:normal; margin-bottom:.4em; }
    h1 span { font-size:60; color:#666; font-weight:normal; }
    #info { background:#f6f6f6; }
    #info ul { margin: 0.5em 4em; }
    #info p, #summary p { padding-top:10px; }
    #summary { background: #ffc; }
    #explanation { background:#eee; border-bottom: 0px none; }
  </style>
</head>
<body>
<div id="summary">
  <h1>Forbidden <span>(403)</span></h1>
  <p>CSRF verification failed. Request aborted.</p>

</div>

<div id="info">
  <h2>Help</h2>

    <p>Reason given for failure:</p>
    <pre>
    CSRF token missing or incorrect.
    

Как правило, это может произойти, когда имеется подлинная подделка межсайтовых запросов или когда <а HREF = 'http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ref-contrib-csrf'>Django's Механизм CSRF не был использован правильно. Для POST-форм вам необходимо обеспечить:

  • Функция просмотра использует RequestContext для шаблона вместо Context.
  • В шаблоне есть тег шаблона {Jsrf_token } внутри каждой формы POST, который предназначается для внутреннего URL.
  • Если вы не используете CsrfViewMiddleware, то вы должны использовать csrf_protect для любых представлений, использующих csrf_token Шаблонный тег, а также те, которые принимают данные POST.

Вы видите раздел справки на этой странице, потому что у вас есть DEBUG = True в вашем файле настроек Django. Измените это на False, и будет отображаться только начальное сообщение об ошибке.

Вы можете настроить эту страницу, используя параметр CSRF_FAILURE_VIEW.

Эта ошибка возникла на веб-странице, с которой я пытаюсь получить доступ.

Основываясь на моих собственных исследованиях, я нашел похожий ответ здесь , но я не знаю, как установить / получить токен

Любая помощь будет высоко ценится. Спасибо.

1 Ответ

0 голосов
/ 11 января 2012

Из документов Django CSRF в разделе «Как это работает»:

Защита CSRF основана на следующих вещах:

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

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

  2. Скрытое поле формы с именем «csrfmiddlewaretoken», присутствующее во всех исходящих формах POST.Значением этого поля является значение файла cookie CSRF.

    Эта часть выполняется тегом шаблона.

  3. Для всех входящих запросов, которые не используют HTTP GET, HEAD, OPTIONS или TRACE, файл cookie CSRF должен присутствовать, а поле 'csrfmiddlewaretoken' должно присутствовать и быть правильным.Если это не так, пользователь получит ошибку 403.

    Эта проверка выполняется CsrfViewMiddleware.

  4. Кроме того, для запросов HTTPS строгая проверка реферерасделано CsrfViewMiddleware.Это необходимо для устранения атаки «человек посередине», которая возможна под HTTPS при использовании одноразового номера, независимого от сеанса, из-за того, что HTTP-заголовки «Set-Cookie» (к сожалению) принимаются клиентами, которые обращаются ксайт под HTTPS.(Проверка Referer не выполняется для HTTP-запросов, поскольку наличие заголовка Referer недостаточно надежно для HTTP.)

Это гарантирует, что только формы, созданные на вашем веб-сайтесайт может быть использован для возврата данных POST. (выделено мной)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...