ASP.NET Core中是否需要同时为HttpGet和HttpPost方法添加[Authorize]特性?
ASP.NET Core 控制器Get/Post方法授权配置问题解答
- 两个方法都必须设置
[Authorize(Policy = "AdminMs")]特性,不能只给HttpGet方法添加
原因说明
HttpGet对应的方法仅用于返回创建操作的录入页面,添加授权是为了限制无权限用户看到操作入口。但HttpPost对应的方法才是实际处理数据提交、执行新增逻辑的核心接口,如果不为它添加授权校验,攻击者可以完全绕过页面入口,直接构造HTTP POST请求调用该接口提交非法数据,造成严重的权限绕过漏洞。
优化方案
如果当前控制器下的所有接口都需要AdminMs权限校验,可以直接将授权特性标注在控制器类上,无需为每个Action重复添加,减少冗余代码同时避免漏加风险:
[Authorize(Policy = "AdminMs")] // 加在Controller类上,所有Action自动继承权限校验 public class YourController : Controller { [HttpGet] public async Task<IActionResult> MSCreate() { } [HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> MSCreate(empolyee model) { } // 其余同控制器下的Action也会自动继承授权校验 }
如果控制器下存在部分不需要该权限的接口,单独给对应方法添加[AllowAnonymous]特性即可。
内容的提问来源于stack exchange,提问作者sammer
相关产品推荐
相关产品推荐

