javascript - Cookie 还是本地存储?

标签 javascript security cookies local-storage token

背景:我有两个应用程序前端和后端。后端是 djangodjango Rest Framework。对于身份验证,我使用 token 。客户端通过 post 登录时获取 token 。客户端将此 token 设置为 header 并将 token 保留在 localStorage 中。我将 token 保存到 localStorage 以防止重新打开站点后出现第二次请求。但我写了很多文章,其中提到 localsStorage 很容易受到 xss 攻击。现在我想谈谈cookies。但我不想重写我的后端逻辑。我正在考虑通过 js 将 token 写入 cookie。

我的问题:我应该将 token 写入 cookie 吗?或者我应该重写我的后端应用程序并使用 session ?或者mb不重写它?

最佳答案

Cookie 和本地存储同样容易在客户端被篡改:客户端可以查看和修改两者,它们拥有的任何(可能是恶意的)扩展也可以。但是,如果通过 HTTPS 连接到您的网站,并且他们的浏览器/操作系统/硬件没有恶意窥探事物,那么 cookie 或本地存储就不会有问题。

它们之间的主要区别在于,cookie 会随着每个网络请求发送到服务器,而本地存储保留在用户的硬盘驱动器上,不会发送到服务器。

可以说,Cookie 比本地存储更容易受到攻击,因为如果通过未加密的连接发送 Cookie,则它可能会被拦截 - 但本地存储保留在客户端的计算机上,因此机会较小它被恶意的东西拦截。但是,如果连接是加密的(它应该),那么使用 cookie 就可以了。

如果您的脚本需要将 token 与请求一起发送到服务器,您可能应该使用 cookie,以便可以在后端检查它们。 (如果您使用本地存储,则必须在每个请求中手动发送 token ,这仍然是可能的,但有点不雅,因为 cookie 可以做同样的事情而不需要您手动干预。)

如果您的脚本要求在每个请求中发送 token ,那么如果您愿意,可以随意使用本地存储。如果服务器永远在生成 token 后不需要查看它,那么就不要使用cookie,因为这会无缘无故地产生不必要的开销。

上面相同的一般逻辑适用于客户端上的任何数据。如果服务器经常或有时需要查看它,并且数据不太大,cookie 是一个不错的选择。如果服务器永远不需要看到它,cookie 就是错误的选择。

关于javascript - Cookie 还是本地存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61404882/

相关文章:

php - 使 SQL 查询安全 - 从 $_POST 获取值

cookies - 我可以使用 <img> 标签跨域发送 cookie 吗?

angular - 使用 Angular 5 设置 cookie header

javascript - Safari 和文件上传表单不起作用

javascript - Backbone - 在当前 View 上绑定(bind)和取消绑定(bind)事件

c# - 这个安全警告是什么意思(.Net Process 类)?

php - 如何评估算术微积分?

ios - 如何在 UIWebView 中访问公共(public) Facebook 个人资料

javascript - 使用 Javascript 延迟和淡入文本?

javascript - AngularJS 中的下拉子菜单?