2013-09-19 2 views
2

Прежде чем задавать вопрос, я хотел, чтобы все знали, что я предпочитаю googling, прежде чем спрашивать кого-то. Так что я много разобрался в googled и рассмотрел различные вопросы о csrf_token, а также попытался получить справочную документацию django. Согласился, что ответов так много, но почему-то я все еще смущен, поэтому задаю этот вопрос здесь. Пожалуйста, со мной. Я новая пчела.Избегайте csrf_token и использования @requires_csrf_token после @csrf_exempt

Ситуация: Я создал проект django и setup urls.py, модели просмотров и т. Д. Все работает хорошо, за исключением одной вещи.

urls.py фрагмент кода:

urlpatterns = patterns('', 
(r'^$', main_page), 
(r'^sendcall/$', sendcall), 
(r'^dial_ag/$', dial_ag), 

Так мой «/», «/ sendcall /» работают отлично, как и ожидалось, как они получают запрос POST от моих форм и шаблонов csrf_token не присутствуют там, так что никаких проблем вообще.

Теперь этот/dial_ag/url никогда не будет вызван из моего приложения. Этот URL-адрес будет вызываться сторонним API (я настроил этот URL-адрес в своем приложении, чтобы отправить запрос POST на этот URL-адрес). Я понял, что в таком случае вид dial_ag в views.py должен быть использован при декоратора @csrf_exempt в противном случае третья сторона всегда будет получать 403 запрещенный ответ, потому что я думаю, Джанго ожидает даже это уже csrf_token в запросе?

Так что теперь он работает, но я читал на StackOverflow себя об использовании @requires_csrf_token после @csrf_exempt позаботиться о нарушении безопасности - способ передать csrf_token внутренне как-то и защищает точку зрения, как:

@csrf_exempt 
@requires_csrf_token 
def my_protected_unprotected_view(): 
    ... 

Вот где я застрял. Я не могу понять эту концепцию или найти хорошую документацию (да, документация django здесь не помогает.) О том, как ее реализовать. Как от urls.py сам я передам токен в представление, так что мне не нужно использовать только @csrf_exempt. Стороннее приложение не имеет никакого отношения к проекту, кроме отправки REQUEST на мой url, который не должен иметь токен, но использует @csrf_token - лучший способ справиться с такой ситуацией?

Благодаря

ответ

0
  • Если ваше приложение третья сторона не изменяет данные, вы можете предпочесть запрос GET.
  • Вы можете использовать @csrf_exempt, так как стороннее приложение не работает на вашей странице. Но вы должны иметь надлежащий механизм аутентификации и авторизации в вашем коде.
+0

Благодарим за отзыв. «Но у вас должен быть правильный механизм авторизации и авторизации в вашем коде». Да, этот API предоставляет подпись в REQUEST HEADER, которую я могу проверить в своем коде, подтверждая, что запрос поступает только от этой третьей стороны. Однако я бы избегал запроса GET. И у вас есть ссылка ссылки ссылки на ссылки и т. Д. О @requires_csrf_token? – Anushka

+0

http://joelklabo.wordpress.com/2010/06/09/more-django-csrf-token-fun/ –

Смежные вопросы