Хорошо, ребята, я пишу приложение Django, и мне просто нужно понять, что на самом деле означает токен csrf и как он защищает данные. Являются ли почтовые данные небезопасными, если вы не используете токены csrf?
Я знаю, как использовать csrf_token, но мне просто нужна информация о том, как это работает.
www.mybank.com
mybank.com
приведет к запросу (концептуально) формы http://www.mybank.com/transfer?to=<SomeAccountnumber>;amount=<SomeAmount>
. (Номер вашей учетной записи не нужен, потому что это подразумевается вашим логином.)www.cute-cat-pictures.org
, не зная, что это вредоносный сайт.mybank.com
(требуется некоторая удача!), они могут включить на свою страницу запрос типа http://www.mybank.com/transfer?to=123456;amount=10000
( где 123456
- номер их счета в Каймановых островах, а 10000
- это сумма, которую вы считали ранее своей радостью).www.cute-cat-pictures.org
, чтобы ваш браузер выполнил этот запрос.www.mybank.com
, и он будет выглядеть совершенно законным. Там идут ваши деньги!Это мир без токенов CSRF.
Теперь для лучшего с токенами CSRF:
http://www.mybank.com/transfer?to=123456;amount=10000;token=31415926535897932384626433832795028841971
.mybank.com
будет включать в себя на своей веб-странице, когда оно будет служить вам. Он отличается каждый раз, когда он обслуживает любую страницу.www.mybank.com
.Результат: вы сохраняете свои денежные единицы 10000
. Я предлагаю вам пожертвовать часть этого в Википедию.
(Ваш пробег может отличаться.)
Да, данные сообщения безопасны. Но происхождение этих данных не является. Таким образом, кто-то может обмануть пользователя с помощью JS для входа на ваш сайт, просматривая веб-страницу злоумышленника.
Чтобы предотвратить это, django отправит случайный ключ как в файле cookie, так и в форме данных. Затем, когда пользователи POSTs, он проверяет, идентичны ли два ключа. В случае, когда пользователь обманывается, сторонний веб-сайт не может получить файлы cookie вашего сайта, что вызывает ошибку auth.
Сайт создает уникальный токен, когда он создает страницу формы. Этот токен необходим для отправки/получения данных обратно на сервер.
Поскольку токен генерируется вашим сайтом и предоставляется только тогда, когда создается страница с формой, некоторые другие сайты не могут имитировать ваши формы - у них не будет токена, и поэтому он не может публиковать на вашем сайте.
Корень всего этого заключается в том, чтобы убедиться, что запросы поступают от фактических пользователей сайта. Для форм создается токен csrf и должен быть привязан к пользовательским сеансам. Он используется для отправки запросов на сервер, в котором маркер проверяет их. Это один из способов защиты от csrf, другой - проверка заголовка referrer.