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

Blazor WASM客户端授权校验绕过演示方法技术问询

如何在浏览器中绕过Blazor WebAssembly客户端授权校验

方法1:篡改客户端授权状态(最快演示)

  1. 打开浏览器F12开发者工具,切换到「控制台」标签
  2. 执行以下代码,直接伪造符合目标策略的用户身份:
// 获取Blazor的身份验证状态提供者实例
const authStateProvider = await window.DotNet.defaultServices.getService('Microsoft.AspNetCore.Components.Authorization.AuthenticationStateProvider');
// 创建包含目标权限声明的伪造身份
const fakeClaims = [new window.Security.Claims.Claim('IsSomebodySpecial', 'true')];
const fakeIdentity = new window.Security.Claims.ClaimsIdentity(fakeClaims, 'fake-auth');
const fakePrincipal = new window.Security.Claims.ClaimsPrincipal(fakeIdentity);
// 更新应用的授权状态
authStateProvider.setAuthenticationState(Promise.resolve(new window.AspNetCore.Components.Authorization.AuthenticationState(fakePrincipal)));
  1. 执行完后切换页面或刷新,原本被<AuthorizeView Policy="IsSomebodySpecial">保护的内容会直接展示出来。

方法2:篡改本地存储中的JWT令牌(如果应用用JWT)

  1. 打开开发者工具「应用」标签,找到localStorage或sessionStorage中存储JWT的键(通常类似access_token或blazor-auth-token)
  2. 复制令牌内容,用任意JWT工具解码,添加策略要求的声明(比如IsSomebodySpecial: true)
  3. 把修改后的声明重新编码为JWT(不需要签名,客户端不会验证签名有效性)
  4. 将篡改后的令牌替换回存储中,刷新页面即可绕过客户端授权。

方法3:直接修改WebAssembly编译代码(彻底演示客户端代码可控)

  1. 打开开发者工具「源代码」标签,找到Blazor编译后的.wasm文件
  2. 搜索授权相关的判断逻辑(比如AuthorizeView的权限校验代码)
  3. 将校验条件直接修改为return true(或对应的WASM指令)
  4. 保存修改后刷新页面,所有受保护内容会无条件显示。

核心风险总结

以上操作全部在客户端完成,无需服务器权限,直接证明:

  • Blazor客户端授权仅用于UI展示控制,无法真正限制用户访问敏感内容
  • 如果后端API没有做服务器端授权校验,用户绕过客户端授权后,还能直接调用敏感接口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:10:19