JWT是否可以避免XSS攻击和CSRF攻击
JWT介绍
JWT是一种适合分布式的用户身份验证方式,特点是不同微服务可以独立验证用户身份,获取用户身份信息。
前端使用JS将JWT放在header中手动发送给服务端,服务端验证header中的JWT字段,而非cookie信息
XSS跨站脚本攻击
用户访问网页的时候,执行了源网站没有的JS脚本
比如
将js脚本添加的url地址后面
源服务器被黑客攻击,网页夹带了黑客的JS脚本
结论:
JWT无法避免XSS攻击,因为js脚本可以从store中获取用户的jwt令牌
CSRF攻击
用户在登录源网站的情况下,在不知情的情况下调用了目标网站的接口(带着cookie)
典型场景,比如伪造的网站B有一个图片src地址是源网站A的。
用户登录A网站的前提下,访问B网站,会在不知情的情况下自动带着A网站的cookie请求了B网站的src地址的接口
传统防御方法是,每个表单要增加一个隐藏的csrf的token,这样在B网站请求A接口的时候没有这个token后端不予执行。
结论:
JWT可以一定程度避免CSRF攻击,因为JWT令牌是配置在header里,不是cookie里。
而接口请求Header是需要A网站的JS脚本来主动赋值的
但是也有风险,
比如A网站同时支持cookie和jwt验证,前端也同时保存了登录的cookie和jwt令牌。
才疏学浅,暂时只理解到这里,如有不对,欢迎补充指正