Вы не можете с уверенностью сказать, что куки предпочтительнее localStorage.Это действительно зависит от того, как вы реализуете свое приложение, какую платформу вы используете и что именно вы хотите делать.позвольте мне описать его более точно.
Файл cookie с httpOnly:
Файлы cookie, используемые с флагом cookie HttpOnly, недоступны через JavaScript.
Когда вы сохраняете свой токен jwt в cookie и устанавливаете его через http-запрос set-cookie
в браузере, браузер будет отправлять эти учетные данные при каждом запросе.Конечно, вы можете обезопасить его, применив для файлов cookie httpOnly
и secure
.Так что никакой javascript не получит к нему доступ.Но проблема в том, что вы открываете шанс для CSRF
атак.
Когда токен сохраняется в файле cookie, браузер автоматически отправляет его вместе с каждым запросом в один и тот же домен, и он по-прежнему уязвим для атак CSRF.
localStorage:
С другой стороны, токены jwt отправляются в заголовке авторизации в каждом запросе.Поэтому браузер не устанавливает его автоматически в ваших запросах.это должно быть установлено на каждый запрос через javascript на стороне клиента.
Таким образом, поскольку браузер не добавляет автоматически каждый запрос, по умолчанию он не уязвим для CSRF.
Но проблема возникает, когда ваш клиентский код уязвим к * 1029.*.В этом случае, поскольку вы храните свои учетные данные в localStorage, то злоумышленник будет иметь полный контроль над клиентской стороной и может делать все что угодно.Разница в хранении в cookie заключается в том, что злоумышленник не знает точного значения cookie, которые хранятся с флагом httpOnly.Но он мог отправлять запросы с этими заголовками http.
Так что, на мой взгляд, это зависит от следующих ситуаций:
вы хотите сохранить токены jwt в localStorage , убедитесь, что вы проверили все свои входные данные и проверили их.Используйте платформу, которая не уязвима для XSS
(наверняка, фреймворк не может это утверждать, но, по крайней мере, используйте среду, которая недавно не сообщала о CVE).Также всегда обновляйте свои клиентские коды.Реализуйте все концепции безопасности, такие как csp
и ... Также будьте внимательны с тем, какую CDN вы используете, и будьте осторожны с библиотекой, которую вы используете.
вы предпочитаете использовать cookie и установите учетные данные через Cookie в браузере.Тогда будьте осторожны, чтобы реализовать методы смягчения анти-CSRF.всегда используйте https
и устанавливайте флаг secure
.будьте осторожны при использовании cookie-файлов, например, при атаке на поддомен и при атаке «человек посередине».Также Django использует два классных метода для обработки этой ситуации (подробнее об этом здесь)
- Double-Submit Cookie
- Token Synchronizer
последнее примечание: Я не думаю, что есть общее решение для этой темы, и любой может предложить, основываясь на его экспериментах и знаниях. Кстати, я предпочитаю localStorage хранить учетные данные, полученные от Rest API .Но я действительно рад, если кто-нибудь сможет поправить меня для лучшего решения.