【问题标题】:Spring security and spring data : secure access to data that doesn't belong to the current userSpring security 和 spring data :安全访问不属于当前用户的数据
【发布时间】:2020-10-24 12:38:34
【问题描述】:

我正在使用 mongodb 构建一个 angular/springboot 全栈项目。但是我有一个关于访问不属于当前用户的数据的安全问题。例如,如果我有一个 url /mydata/123 那么当前用户可以在 /mydata/7865 之类的 url 中使用随机 id 并访问不属于他的数据。

这里是一个数据模型示例:

mydatamodel {
    id
    criticaldata
}

请问如何避免这种用例,以及这样做的最佳做法是什么。 谢谢。

【问题讨论】:

标签: spring-boot rest spring-security spring-data spring-data-mongodb


【解决方案1】:

使用可以通过 SPEL 中的主体访问当前登录的用户,并且您还可以访问 userId,因为它是请求参数。然后你在一个 bean 中运行你的规则。

@PreAuthorize("@userIdAccessCheckService.hasAccessTo(principal , #userId)")

@GetMapping("/user/{userId}")
public void yourRestControllerMethod(@RequestParam("userId") String userId){
    
}
  @Service
  public class UserIdAccessCheckService{

    
      // In this method, you can run your rule and check 
      // if the logged in person have access to userid
      public boolean hasAccessTo(User principal , String userId){
       ....
      }
  }

注意

如果您允许控制器方法但希望根据类似规则显示/隐藏该页面上的某些部分,则它有一些缺点。既然这不是问题,那很好

【讨论】:

    猜你喜欢
    • 2016-12-27
    • 1970-01-01
    • 2018-09-07
    • 2017-11-04
    • 2018-04-10
    • 2013-12-15
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多