javascript - Cookie 还是本地存储?
问题描述
背景:我有两个应用程序前端和后端。用. django
_ django rest framework
对于身份验证,我使用令牌。因此,当客户端登录时,它会通过post
. 客户端将此令牌设置为header
并将令牌保存在localStorage
. 我保存令牌以localStorage
防止用户在重新打开站点后发出第二个请求。但是我写了很多文章,其中写的localsStorage
是易受攻击的并且容易受到xss
攻击。而现在我的事情cookie
。但我不想重写我的后端逻辑。我正在考虑通过js将令牌写入cookie。
我的问题:我应该写令牌cookie
吗?或者我应该重写我的后端应用程序并使用会话?还是 mb 保持原样?
解决方案
cookie 和本地存储同样容易在客户端被篡改:客户端可以看到和修改两者,它们拥有的任何(可能是恶意的)扩展也可以。但是,如果与您的站点的连接是通过 HTTPS 进行的,并且他们的浏览器/操作系统/硬件没有恶意窥探事物,那么 cookie 或本地存储不应该有问题。
它们之间的主要区别在于,cookie 会随每个网络请求发送到服务器,而本地存储则保留在用户的硬盘上,不会发送到服务器。
cookie 可以说比本地存储更容易受到攻击,因为如果 cookie 通过未加密的连接发送,它可以被拦截 - 但本地存储保留在客户端的机器上,因此它被恶意软件拦截的可能性较小。但是,如果连接是加密的,那么使用cookie 就可以了。
如果您的脚本需要将令牌与请求一起发送到服务器,您可能应该使用 cookie,以便您可以在后端检查它们。(如果您改用本地存储,则必须在每个请求中手动发送令牌,这仍然是可能的,但考虑到 cookie 可以在不需要您手动干预的情况下做同样的事情,这有点不雅。)
如果您的脚本不需要随每个请求一起发送令牌,那么如果您愿意,请随意使用本地存储。如果服务器在生成令牌后从不需要查看令牌,则不要使用 cookie,因为这将无缘无故地产生不必要的开销。
上述相同的一般逻辑适用于客户端的任何数据。如果服务器经常或有时需要查看它,如果数据不是太大,cookie 是一个不错的选择。如果服务器永远不需要看到它,cookie 是错误的选择。
推荐阅读
- java - 具有实用程序静态方法的类给出非瞬态不可序列化实例字段错误
- python - 诗歌的默认安装路径是什么
- mysql - vb.net 身份验证 invalidcastexception
- superuser - java.lang.UnsatisfiedLinkError:无法加载 SWT 库
- spring - PlatformTransactionManager 的实现
- python - 如何将形状(h,w,c)的ndarray转换为类似文件的对象
- python - 用python写一个程序,求前200个跳跃数字的总和
- android - kotlin - android - 单例视图模型中的 viewModelScope
- emulation - AOSP模拟器启动崩溃,
- amazon-cognito - 用于 Angular 网站身份验证的 AWS Cognito.. 属性不符合架构:电子邮件:属性是必需的