保护您的web api操作不受已验证用户的攻击



我有这样的场景:

1个用户-N项目

1项目-N任务

1个项目-NComment

当用户通过身份验证时,他可以执行以下操作:

/api/tasks/1

删除他的任务,但当他在做/api/tasks/2时,他删除了其他的任务

/api/comments/1 

以获得他的评论,但当他在做/api/评论/2时,他阅读了其他的任务

我如何拦截用户操作(操纵URI)并以常规方式检查是否允许用户删除此Task。

Task和Comment对userId一无所知,那么如何禁止用户删除其他人的数据呢?

我不是在谈论用户和角色场景。我说的是操纵URI来删除属于其他人的资源。

更新以回答@A Khurdairy的问题

1) 电子邮件+密码发送到api。

2) Api返回带有用户令牌的用户。

3) 然后,对于每个请求,令牌都被发送到api,(这样就可以知道哪个用户在做什么,并在后端处理这个问题。)

我个人不会使用URI来解决这个问题(我认为没有安全的方法来实现这一点)。我将实现一个自定义授权过滤器。如果你不熟悉,请查看此链接以获得如何做到这一点的帮助。

在过滤器中,我会使用令牌来获取用户id,并使用路由数据来查看用户试图执行的过程(以及任务或注释的id),然后根据该过程决定用户是否可以继续。

过滤器可以在控制器类的顶部注册,或者只在一些操作方法上注册,或者如果需要,可以从global.asax注册到所有操作。

我觉得你要么必须将UserId添加到Comment和Task实体中,以便轻松检查,要么需要确保Task或Comment也属于用户可以访问的项目?

除非我误解了你的问题?

如果任务或注释没有UserId,您将如何区分自己的注释和任务以及其他人?

最新更新