Джанго - Как сделать CSFR на публичных страницах? Или, еще лучше, как следует использовать период? - PullRequest
4 голосов
/ 12 марта 2010

Прочитав это: http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-to-use-it

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

Полагаю, я не совсем понимаю, когда это безопасно использовать из-за этого утверждения:

Это не должно быть сделано для форм POST целевые внешние URL, так как приведет к тому, что токен CSRF будет утечка, приводящая к уязвимости.

Причина, по которой это сбивает с толку, заключается в том, что; для меня «внешним URL» будет страница, которая не является частью моего домена (т. е. я владею www.example.com и размещаю форму, которая публикует на www.spamfoo.com. Это, очевидно, не может иметь место поскольку люди не будут использовать Django для создания форм, которые публикуются на сайтах других людей, но как может быть так, что вы не можете использовать защиту CSRF в общедоступных формах (например, в форме входа в систему)?

1 Ответ

0 голосов
/ 12 марта 2010

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

Этого не следует делать для форм POST, которые нацелены на внешние URL-адреса, так как это может привести к утечке токена CSRF, что приведет к уязвимости.

Если вы публикуете форму в своем домене, вы захотите, чтобы защита от CSRF была включена по умолчанию, если только у вас нет особых причин ее отключать (что должно быть реже, чем нет).

...