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

C#控制器JWT角色授权问题:防止用户删除他人帖子的方案咨询

问题解答

第一个问题:原端点是否允许用户删除他人帖子?

是的,完全可以。原端点的[Authorize(Roles = "User")]仅校验请求者是否拥有User角色,没有验证传入的userId是否与当前授权用户的实际ID一致。所以ID为1的User用户,只要构造携带userId=5和postId=20的请求,就能调用这个接口删除他人帖子,存在严重的权限漏洞。

原端点代码:

[HttpDelete("{userId}/post/{postId}")]
[Authorize(Roles = "User")]
public async Task<IActionResult> DeleteUserPost(int userId, int postId, CancellationToken ct)
{
    _mediator.Send(new DeletePostCommand(userId, postId), ct);
    return Ok("Post deleted.");
}

第二个问题:修改后的方案能否防止该问题?

这个方案是可行的,但要注意必须在命令处理程序中完成两个关键步骤:

  1. 从HttpContext中获取当前授权用户的真实ID(彻底抛弃前端传入的用户ID);
  2. 查询目标帖子postId的归属用户ID,校验是否与当前用户ID一致,只有匹配时才执行删除操作。

修改后端点代码:

[HttpDelete("post/{postId}")]
[Authorize(Roles = "User")]
public async Task<IActionResult> DeleteUserPost(int postId, CancellationToken ct)
{
    _mediator.Send(new DeletePostCommand(postId), ct);
    return Ok("Post deleted.");
}

这种方式的核心是把用户ID的来源从前端输入改为授权上下文,彻底切断了用户篡改目标用户ID的可能,再配合帖子归属校验,就能确保用户只能删除自己的帖子。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:20:57