2010-03-12 1 views
4

После прочтения этого: http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-to-use-itDjango - Как сделать CSFR на общедоступных страницах? Или, еще лучше, как его использовать?

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

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

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

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

+0

На самом деле, у меня есть случай использования, где форма * * отправлена ​​на другой сайт. Это небольшой сайт электронной коммерции, в котором используется корзина для покупок от электронной коммерции Mal (http://www.mals-e.com/). Сайт, использующий это, не написан в Django, но нет причин, по которым что-то подобное не может произойти с сайтом Django. –

+2

Я думаю, вам нужно лучше понять, почему CSRF является уязвимостью. Хороший шаг - прочитать о той же политике происхождения: http://code.google.com/p/browsersec/wiki/Part2 – rook

ответ

0

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

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

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

+0

@Brian. Я путаюсь, потому что таргетинг на внешние URL-адреса очень редок, поэтому для меня я видел это как внешняя по отношению к вашей компании (как и не администратор или другой внутренний интерфейс), и если бы я создал приложение для блога, и мои пользователи добавили JavaScript на свои страницы блога (потому что они им доверяли), XSS мог бы отправить маркер другому сервер. Это заставляет меня думать, что материал CSRF от Django не является безопасным вообще, если я не создаю веб-сайт, который не включает контент от пользователей (без социальных сетей, блога, CMS, cart и т. Д.), Что в значительной степени сделает его бесполезным. Я не смущен тем, как это работает. – orokusaki

+0

Я согласен, что таргетинг внешних URL-адресов встречается редко. Я также согласен с тем, что документация может выиграть от некоторых изменений. Я думаю, что это просто сказать, что это «бесполезно». Приложения для социальных сетей, безусловно, имеют свое место там, но не забывайте, что есть много других классов приложений, управляемых формами/данными. –

+0

Я согласен с тем, что потенциальная возможность выявления токена CSRF является одним из многих аспектов, связанных с безопасностью, которые вы хотите рассмотреть, создавая страницы, которые позволяют пользователям запускать произвольные скрипты. Тем не менее, я не могу думать о многих случаях использования, когда я представлял форму заявки на странице, которая выполняла произвольный код пользователя. –

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