Blazor WASM客户端授权校验绕过演示方法技术问询
如何在浏览器中绕过Blazor WebAssembly客户端授权校验
方法1:篡改客户端授权状态(最快演示)
- 打开浏览器F12开发者工具,切换到「控制台」标签
- 执行以下代码,直接伪造符合目标策略的用户身份:
// 获取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)));
- 执行完后切换页面或刷新,原本被
<AuthorizeView Policy="IsSomebodySpecial">保护的内容会直接展示出来。
方法2:篡改本地存储中的JWT令牌(如果应用用JWT)
- 打开开发者工具「应用」标签,找到
localStorage或sessionStorage中存储JWT的键(通常类似access_token或blazor-auth-token) - 复制令牌内容,用任意JWT工具解码,添加策略要求的声明(比如
IsSomebodySpecial: true) - 把修改后的声明重新编码为JWT(不需要签名,客户端不会验证签名有效性)
- 将篡改后的令牌替换回存储中,刷新页面即可绕过客户端授权。
方法3:直接修改WebAssembly编译代码(彻底演示客户端代码可控)
- 打开开发者工具「源代码」标签,找到Blazor编译后的
.wasm文件 - 搜索授权相关的判断逻辑(比如
AuthorizeView的权限校验代码) - 将校验条件直接修改为
return true(或对应的WASM指令) - 保存修改后刷新页面,所有受保护内容会无条件显示。
核心风险总结
以上操作全部在客户端完成,无需服务器权限,直接证明:
- Blazor客户端授权仅用于UI展示控制,无法真正限制用户访问敏感内容
- 如果后端API没有做服务器端授权校验,用户绕过客户端授权后,还能直接调用敏感接口
内容的提问来源于stack exchange,提问作者jkf
相关产品推荐
相关产品推荐

