我正在使用Django和angular构建一个应用程序。目前,我正在将后端发出的JWT存储在本地存储中。但是,我担心XSS攻击。我应该使用仅HTTP cookie来存储令牌吗?我也正在考虑将令牌存储在变量字段的auth服务类中。但是我不能完全确定angular是否在整个应用程序中共享服务。我的认证服务会不会有一个实例?
答案 0 :(得分:1)
假设您正在使用标准依赖项注入,则每次都会实例化服务的新实例,因此将不存储服务类中的字段。
会话或本地存储也可以。 JWT机制可防止客户端轻易更改内容(因为您必须在下游后端服务上对其进行验证)。
可以想象,您可以在JWT有效负载中保留一些原始请求签名,并在此匹配下检查所有次要请求。例如,IP地址,用户代理字符串等。
就个人而言(前提是正确实施),对于大多数面向Web的应用程序,我认为这已经足够了。显然,银行/金融应用程序不妨加倍努力,采用2要素验证等。
答案 1 :(得分:0)
让事情变得简单:
如果您获得了XSS,那就结束了。期间。
说,
在我当前的工作场所中通过外部Penetration Tests
的一种方法是将JWT
令牌放在httpOnly secure samesite=strict
cookie中。
要进一步防止CSRF,您可以在Web存储中添加标识符,将其作为标题附加到每个xhr
上。
在服务器中,从jwt
中提取标识符,并将其与标头值进行比较。