Я нашел информацию о CSRF + без использования файлов cookie для аутентификации:
https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/
«поскольку вы не полагаетесь на файлы cookie, вам не нужно защищаться от межсайтовых запросов»
http://angular-tips.com/blog/2014/05/json-web-tokens-introduction/
"Если мы пойдем по пути файлов cookie, вам действительно нужно будет выполнить CSRF, чтобы избежать межсайтовых запросов. Это то, что мы можем забудьте при использовании JWT, как вы увидите ".
(JWT = Json Web Token, аутентификация на основе токенов для приложений без сохранения состояния)
http://www.jamesward.com/2013/05/13/securing-single-page-apps-and-rest-services
«Самый простой способ выполнить аутентификацию, не рискуя уязвимостью CSRF, - просто избегать использования файлов cookie для идентификации пользователя. "
http://sitr.us/2011/08/26/cookies-are-bad-for-you.html
«Самая большая проблема с CSRF заключается в том, что файлы cookie не обеспечивают абсолютно никакой защиты от этого типа атак. Если вы используете аутентификацию файлов cookie вы также должны принять дополнительные меры для защиты от CSRF. Самая основная мера предосторожности, которую вы можете предпринять, - убедиться, что ваше приложение никогда не выполняет никаких побочных эффектов в ответ на запросы GET ".
Есть еще много страниц, на которых говорится, что вам не нужна защита CSRF, если вы не используете файлы cookie для аутентификации. Конечно, вы все еще можете использовать файлы cookie для всего остального, но не храните в них что-либо подобное session_id
.
Если вам нужно запомнить пользователя, есть 2 варианта:
localStorage
: Хранилище ключей и значений в браузере. Сохраненные данные будут доступны даже после того, как пользователь закроет окно браузера. Данные недоступны для других веб-сайтов, потому что каждый сайт получает собственное хранилище.
sessionStorage
: Также в хранилище данных браузера. Разница в том, что данные удаляются, когда пользователь закрывает окно браузера. Но это все равно полезно, если ваше веб-приложение состоит из нескольких страниц. Итак, вы можете сделать следующее:
- Пользователь входит в систему, затем вы сохраняете токен в
sessionStorage
- Пользователь нажимает ссылку, которая загружает новую страницу (= настоящая ссылка, без замены содержимого javascript)
- Вы по-прежнему можете получить доступ к токену из
sessionStorage
- Чтобы выйти из системы, вы можете либо вручную удалить токен,
sessionStorage
либо подождать, пока пользователь закроет окно браузера, что очистит все сохраненные данные.
(для обоих посмотрите здесь: http://www.w3schools.com/html/html5_webstorage.asp )
Существуют ли официальные стандарты аутентификации токенов?
JWT (Json Web Token): я думаю, что это все еще черновик, но он уже используется многими людьми, и концепция выглядит простой и надежной. (IETF: http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-25 )
Существуют также библиотеки для множества доступных фреймворков. Просто погуглите!