现代Web应用把越来越多业务逻辑搬到前端。React、Angular、Vue这些框架,加上SPA单页应用、GraphQL接口、API优先架构,彻底改变了开发方式。好处很明显:响应更快、体验更流畅、开发更灵活。但代价是一个反复出现的安全噩梦——把浏览器当成权限验证的防线。
OWASP基金会反复强调:"访问控制只在可信的服务器端代码中有效"。这句话被写了无数次,但生产环境里依然天天有人踩坑。核心原则其实简单到一句话:浏览器是不可信的基础设施。客户端存的东西,理论上都能被提取、篡改、伪造、重放。可很多应用偏偏模糊了两条线的界限:前端该做什么,后端该守什么。
![]()
前端可以渲染界面、管理状态、优化体验,但绝不能成为权限的最终裁判。看看这个常见写法:if (user.role === "admin") { showAdminPanel(); }。代码本身没问题,危险的是后端也跟着偷懒——如果API不独立做服务端验证,改改浏览器状态就能摸到特权功能。这时候浏览器莫名其妙成了信任边界的一部分,而浏览器是最糟糕的边界材料。
一个流传甚广的错觉:"用户看不见按钮,就用不了功能"。错得离谱。攻击者根本不按你的界面规矩来。后端如果藏着特权操作却不验权,前端藏按钮纯属掩耳盗铃。安全靠 obscurity(隐蔽)不是授权。OWASP测试指南专门提醒:检查敏感信息是否存到了客户端。但开发者还是习惯把JWT令牌、用户角色、权限标记往localStorage里塞。
localStorage完全由用户控制。浏览器控制台、DevTools、甚至简单的浏览器扩展都能直接改写。OWASP客户端安全备忘单写得明明白白:"假设所有客户端控件都可被绕过"。整件事就浓缩在这一句里——应用必须把localStorage里的一切视为攻击者控制的输入。OWASP 2021年十大漏洞榜首"失效的访问控制"至今居高不下,因为授权失败直接关乎数据泄露、权限提升、完全账户接管。不像其他漏洞需要复杂利用链,权限问题往往一击即中。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.