能否从浏览器调用Blazor Server函数?是否需要在函数内二次校验权限?
结论
二次校验是必要操作,必须在on_btn_click内调用check_if_user_is_allowed做权限验证。
原因说明
- Blazor Server的事件通信基于SignalR实现,浏览器端和服务端之间传递的事件消息仅包含目标处理函数标识、调用参数等信息,服务端默认不会校验该事件是否对应前端实际渲染的可交互元素。
- 前端通过
@if (check_if_user_is_allowed())控制按钮是否渲染,只是对普通合法用户的交互做了限制,完全无法拦截恶意请求:只要攻击者知道on_btn_click这个处理函数的存在,完全可以自行构造符合格式的SignalR消息发送到服务端触发执行。 - 这一逻辑和传统Web应用中前端隐藏表单提交按钮,攻击者仍可自行构造POST请求提交数据的原理完全一致,前端的所有可见性、交互限制都不可信,服务端侧的权限校验是唯一可靠的安全防线。
对于包含敏感操作的处理函数,除了基础的用户权限校验,建议额外增加操作相关的业务权限校验(比如校验用户是否有权操作对应数据),避免越权访问风险。
内容的提问来源于stack exchange,提问作者Bob5421
相关产品推荐
相关产品推荐

