Я знайшов деяку інформацію про 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
всередині нього.
Якщо вам потрібно запам'ятати користувача, є два варіанти:
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 )
Також є бібліотеки для фреймворку лотів. Просто Google для цього!