Подтвердить что ты не робот

Ток CSRF в Django и iOS

Итак, я пытаюсь понять, что делать здесь... Я делаю вызов POST на моем сервере Django из iOS, и я продолжаю получать ошибку 403 (недопустимый токен CSRF). Я думаю о реализации функции, которая вернет мне токен (вам нужно будет войти в систему, чтобы получить доступ к этой функции), а затем добавьте токен в мой POST-вызов.

Теперь... Я не понимаю, в чем смысл этого делать? Если я использую TastyPie и требуемый логин APIKey... должен ли я просто освободить проверку csrf?

Чтобы убедиться, что я правильно понял... это CSRF, сгенерированный на сеанс пользователя? Поэтому, если я не использую Cookies, CSRF не нужен?

Как обычно люди используют свои серверы Django с iOS и делают такие вызовы POST?

Спасибо!

4b9b3361

Ответ 1

Вы правы: если вы не используете файлы cookie для управления своими сеансами, вам не нужна защита CSRF. CSRF работает, поскольку файлы cookie сеанса автоматически привязаны к запросу; токены доступа не являются.

Я лично нашел эту статью очень полезной. Это определенно стоит прочитать и, вероятно, ответит на многие ваши вопросы.

Что касается tastypie: он позволяет SessionAuthentication. Если вы разрешаете аутентификацию сеанса в tastypie, я предлагаю вам изучить способ защиты ваших пользователей от CSRF. Для других схем аутентификации это не представляется необходимым. Насколько мне известно, Дмитрий прав насчет того, что tastypie отключает CSRF по умолчанию, а это значит, что вы получаете эту ошибку 403. Возможно, происходит что-то еще. Попробуйте обернуть представление в @csrf_exempt.

Что касается токенов CSRF, они также называются независимыми сеансами. Они должны быть постоянными, но вы, вероятно, знаете, что это невозможно для файлов cookie. В любом случае, это означает, что cookie CSRF сохраняется через сеансы.

Ответ 2

Вы правы, CSRF не имеет особого смысла в этом случае, поскольку его цель - защитить пользователей от вмешательства в данные в браузере.

Я считаю, что Tastypie по умолчанию отключает CSRF по его представлениям.