Spring安全性阻止用户操纵url

时间:2016-02-11 13:02:22

标签: java spring spring-security

登录的主管用户可以在html表中查看他的下属。 每个项目都有一个链接,主管可以详细查看选定的下属,如个人信息等... 当主管点击链接时,它将被重定向到/view/123,其中123是所选下属的ID。控制器将处理GET请求'/view/{id}'

这里的问题是主管可以在/view/之后猜出任何数字。可能的解决方案是

  1. 将其更改为更安全的POST,但客户端仍然可以创建仍然不安全的虚拟帖子请求。
  2. 在网址'/view/123?token=54gX23r'中添加令牌以进行其他验证,例如主管将其更改为'/view/456?token=54gX23r' ID且令牌不匹配,服务器将拒绝该请求。
  3. 我认为解决方案没有。 2将解决问题但是我不确定spring是否具有与CSRF令牌类似的内置机制。

2 个答案:

答案 0 :(得分:1)

Spring Security具有内置的CSRF令牌解决方案。要应用它,您需要在<csrf/> Spring Security标记中附加<http>标记,您可以在其中设置安全网址和其他内容,然后在您的jsp或其他任何形式中包含这些标记。

  

如果您使用的是Spring MVC <form:form>标签或Thymeleaf 2.1+,那么   使用@EnableWebSecurityCsrfToken会自动包含在内   你

更多详情:https://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html

哦,使用Spring Security

时,默认情况下也会应用<csrf/>标记

答案 1 :(得分:0)

唱出id会是一个解决方案(通过添加令牌/签名),但我宁愿建议检查是否允许用户查看此下属

令牌可以像:

一样创建
DigestUtils.md5DigestAsHex(("123" + "MY_SECRET").getBytes())

访问资源时,您只需重新创建令牌并验证它与请求发送的令牌相同