背景:我有两个前端和后端应用程序。后端是django
和django rest framework
。对于身份验证,我使用令牌。客户端在通过post
登录时获得令牌。客户端将此令牌设置为header
,并将令牌保留在localStorage
中。我将令牌保存到localStorage
,以防止重新打开网站后出现第二次请求。但我写了很多文章,其中写道localsStorage
是易受攻击的,它很容易受到xss
的攻击。现在我想到了cookies
。但我不想重写我的后端逻辑。我正在考虑通过js将令牌写入cookie。
我的问题:我应该给cookies
写令牌吗?还是应该重写后端应用程序并使用会话?还是mb不重写?
cookie和本地存储都同样容易在客户端被篡改:客户端可以查看和修改这两者,它们拥有的任何(可能是恶意的(扩展也可以。但是,如果与您的网站的连接是通过HTTPS进行的,并且他们的浏览器/OS/硬件没有恶意窥探,那么cookie或本地存储不应该有问题。
它们之间的主要区别在于,每次网络请求都会将cookie发送到服务器,而本地存储则保留在用户的硬盘上,不会发送到服务器。
cookie可以说比本地存储更容易受到攻击,因为如果cookie通过未加密的连接发送,它可能会被拦截,但本地存储留在客户端的机器上,因此被恶意软件拦截的可能性较小。但是,如果连接是加密的,应该是,那么使用cookie也没问题。
如果您的脚本要求将令牌与请求一起发送到服务器,那么您可能应该使用cookie,以便在后端对其进行检查。(如果你使用本地存储,你将不得不在每次请求时手动发送令牌,这仍然是可能的,但有点不雅,因为cookie可以在不需要你手动干预的情况下做同样的事情。(
如果您的脚本不要求每次请求都发送令牌,那么如果您愿意,可以使用本地存储。如果服务器在生成令牌后从未需要查看令牌,则不要使用cookie,因为这将是毫无理由的不必要开销。
上面相同的通用逻辑适用于客户端上的任何数据。如果服务器经常或有时需要查看,如果数据不太大,cookie是一个不错的选择。如果服务器从不需要看到它,那么cookie是错误的选择。