【问题标题】: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){
....
}
}
注意
如果您允许控制器方法但希望根据类似规则显示/隐藏该页面上的某些部分,则它有一些缺点。既然这不是问题,那很好