You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

采用Bearer令牌的RESTful API:XSS与CSRF防护疑问咨询

嘿,你的这个结论在特定场景下是完全正确的!咱们得先把令牌的存储位置、XSS和CSRF的本质差异掰扯清楚,才能彻底搞懂这个事儿~

结论正确性分析

首先得明确两种攻击的核心逻辑:

  • XSS攻击:攻击者通过注入恶意脚本,在用户的浏览器环境里执行,目的是窃取用户的敏感数据(比如Bearer令牌),因为脚本能直接访问浏览器的存储或DOM。
  • CSRF攻击:攻击者利用用户已登录的身份,在用户不知情的情况下发起请求,但它无法获取用户的令牌——跨域脚本拿不到其他域的存储数据(除非有XSS漏洞),只能依赖浏览器自动携带的Cookie。

接下来看令牌的不同存储场景:

  • 存在localStorage/sessionStorage:这时候你的结论完全成立!XSS脚本可以直接通过localStorage.getItem('token')拿到令牌,然后发送到攻击者的服务器;而CSRF攻击对这种存储方式基本无效,因为跨域请求不会自动携带localStorage里的令牌,攻击者没法在请求头里添加Authorization字段。
  • 存在HttpOnly Cookie:情况反过来了——XSS拿不到令牌(HttpOnly属性禁止JS访问Cookie),但反而可能面临CSRF风险,因为浏览器会自动在同域请求里带上Cookie,攻击者可以构造跨域表单提交,让用户在登录状态下发起恶意请求。
  • 存在内存中(比如Vue/React的状态管理):相对安全,页面刷新后令牌就消失了,XSS要窃取的话得在令牌还在内存时注入脚本;同样CSRF也无效,因为请求需要手动携带令牌,攻击者没法自动获取。
针对性防护方案

针对XSS风险(令牌存localStorage/sessionStorage或内存)

  • 输入输出全编码:所有用户输入的内容(评论、表单数据等)都要做HTML编码,把<转成&lt;、>转成&gt;这类特殊字符,避免恶意脚本被浏览器渲染执行。
  • 严格配置CSP(内容安全策略):在服务器端设置CSP响应头,限制脚本的加载来源(比如只允许同域脚本),禁止内联脚本和eval函数,就算有XSS注入,恶意脚本也没法跑起来。
  • 拒绝不可信第三方资源:别随便引入未知来源的广告插件、第三方脚本,很多XSS漏洞都是因为引入了恶意第三方代码。
  • 令牌短期有效+刷新机制:给Bearer令牌设置较短的有效期(比如15分钟),同时用刷新令牌(存在HttpOnly Cookie里)来获取新的访问令牌,就算令牌被窃取,攻击者能用的时间也很有限。

针对CSRF风险(令牌存HttpOnly Cookie)

  • 使用CSRF令牌:服务器给每个用户会话生成一个随机的CSRF令牌,前端把这个令牌放到页面的meta标签或表单隐藏字段里,发送请求时要么放到请求头(比如X-CSRF-Token),要么作为参数携带,服务器验证请求里的令牌和会话里的是否一致。
  • 设置SameSite Cookie属性:把Cookie的SameSite设为Strict或Lax,这样浏览器只会在同域或安全的跨域请求里带上Cookie,直接阻止第三方网站发起的CSRF请求。
  • 验证请求头:服务器只接受Content-Type为application/json的请求,因为CSRF通常是通过表单提交(application/x-www-form-urlencoded)发起的,这种方式没法构造JSON请求头。

内容的提问来源于stack exchange,提问作者Anindit Karmakar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:00:55