2015-10-19 4 views
0

У меня есть конечная точка, которая должна работать как API:django: есть @csrf_exempt хорошая идея?

/reset/<ID> 

Это будет вызываться с помощью Ajax/угловой от отдельного клиента (вопросы CORS уже рассмотрены).

Теперь, если я просто опубликовать конечную точку в urls.py, я получаю сообщение об ошибке:

403 Forbidden 
CSRF verification failed. Request aborted. 

Причины понятны мне.

Итак, я исследовал и нашел этот декоратор @csrf_exempt. С его помощью он работает ... но нормально ли это делать так? Запрос не соответствует циклу запроса-ответа, клиент может отправить этот сброс в любое время - поэтому я не знаю, как отправить заголовок X-CSRF-Token клиенту ... так что, возможно, в конце концов это единственный способ пойти ?

+1

Как вы аутентифицируете клиента? Маркер CSRF защищает от злоупотребления информацией, которая отправляется по каждому запросу пользователем или агентом браузера, таким как файл cookie, содержащий идентификатор сеанса пользователя. Если вы не используете такую ​​информацию, вы можете безопасно использовать '@ csrf_exempt'. – knbk

+0

Это будет использоваться для сброса пароля и будет иметь код входа, действительный только один раз. Таким образом, не может быть подлинной аутентификации ... Идентификатор должен быть уникальным и недопустимым .... действительно копировать вставку из других решений .... – faboolous

+0

@knbk, если хотите, вы можете предоставить свой комментарий в качестве ответа , и я приму это. Ваш комментарий действительно открыл мне глаза, как правильно это сделать, что не имеет никакого отношения к csrf_exempt, но с надлежащим API :) спасибо. – faboolous

ответ

0

Это зависит от того, как вы аутентифицируете пользователя. Маркер CSRF защищает от злоупотребления информацией, которая отправляется по каждому запросу пользователем или агентом браузера, таким как куки-файл, содержащий идентификатор сеанса пользователя. Если вы не используете такую ​​информацию, вы можете безопасно использовать @csrf_exempt.

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