java - Spring security 阻止用户操纵 url

标签 java spring spring-security

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

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

  1. 将其更改为 POST,这样更安全,但客户端仍然可以创建一个仍然不安全的虚拟 post 请求。
  2. 在网址中添加 token '/view/123?token=54gX23r'以进行额外验证,例如主管将其更改为'/view/456?token=54gX23r' id 和 token 不匹配,请求将被服务器拒绝。

我认为解决方案没有。 2 将解决这个问题,但是我不确定 spring 是否有一个类似于 CSRF token 的内置机制。

最佳答案

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

If you are using Spring MVC <form:form> tag or Thymeleaf 2.1+ and are using @EnableWebSecurity, the CsrfToken is automatically included for you

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

哦,<csrf/>使用 Spring Security 时,默认情况下也会应用标签

关于java - Spring security 阻止用户操纵 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35340093/

相关文章:

Java - 应该是基本的东西是每行都给出错误

java - 如何使用 Java 实体将 Bootstrap 输入类型日期持久化为 MySQL 类型日期?

spring-security - 无法触发 Spring Security OAuth2 登录

java - 将属性文件或 xml 文件中的属性值注入(inject) PreAuthorize(...) java 注释(未解决)

java - 如何在没有接收到数据的情况下检查是否有来自 TCP 套接字的传入数据?

java - 通过触摸屏幕移动矩形

java - Velocity:如何部分解析html模板?

java - 在服务器停止之前运行 Java 代码

java - Spring Boot Maven webapp 文件夹和 ResourceHandler

spring - spring-security 收到空凭据(用户名和密码)时如何创建自定义响应?