Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Cookie还是本地存储?_Javascript_Security_Cookies_Local Storage_Token - Fatal编程技术网

Javascript Cookie还是本地存储?

Javascript Cookie还是本地存储?,javascript,security,cookies,local-storage,token,Javascript,Security,Cookies,Local Storage,Token,背景:我有两个应用程序前端和后端。使用django rest框架对itdjango进行后端处理。对于auth,我使用token。因此,当客户端登录时,它通过post从后端请求令牌。客户机将此令牌设置为标题,并将令牌保留在本地存储中。我将令牌保存到localStorage,以防止用户在重新打开站点后发出第二个请求。但是我写了很多文章,其中写到localsStorage易受攻击,并且容易受到xss攻击。现在我想知道关于cookie。但我不想重写我的后端逻辑。我正在考虑通过js将令牌写入cookie

背景:我有两个应用程序前端和后端。使用
django rest框架
对it
django
进行后端处理。对于auth,我使用token。因此,当客户端登录时,它通过
post
从后端请求令牌。客户机将此令牌设置为
标题
,并将令牌保留在
本地存储中
。我将令牌保存到
localStorage
,以防止用户在重新打开站点后发出第二个请求。但是我写了很多文章,其中写到
localsStorage
易受攻击,并且容易受到
xss
攻击。现在我想知道关于
cookie
。但我不想重写我的后端逻辑。我正在考虑通过js将令牌写入cookie


我的问题:我应该将令牌写入
cookie
?还是应该重写后端应用程序并使用会话?还是保持原样

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

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

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

如果脚本要求将令牌与请求一起发送到服务器,那么您可能应该使用cookie,以便在后端检查它们。(如果改为使用本地存储,则每次请求都必须手动发送令牌,这仍然是可能的,但考虑到cookie可以在不需要您手动干预的情况下执行相同的操作,这有点不雅观。)

如果您的脚本不需要随每个请求一起发送令牌,那么您可以随意使用本地存储。如果服务器在生成令牌后从不需要查看令牌,那么就不要使用cookie,因为它会无缘无故地增加不必要的开销


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

您也可以将该令牌存储在应用程序中。如果您只是含糊地提到您在某处读到的一些潜在安全问题,则无法正确回答此类问题。我将令牌存储在本地存储和应用程序中。但当标签关闭时,应用程序中的令牌将丢失。当用户再次打开选项卡时,我将从localStorage获取令牌@messerbillI不知道哪些地方应该在CBroe进行更详细的描述