Java 使用Spring Security预防CSRF

Java 使用Spring Security预防CSRF,java,spring,spring-security,spring-boot,Java,Spring,Spring Security,Spring Boot,我使用带spring security的spring boot,希望获得spring boot的默认支持,以防止csrf 我通过postman调用restpostapi,以X-CSRF-TOKEN作为头。但我得到了下面的错误 Invalid CSRF Token 'wJIJvkev' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'. 我尝试用UID和ESAPI生成一个令牌,但仍然出现了错误。我缺少什么?您需

我使用带spring security的spring boot,希望获得spring boot的默认支持,以防止csrf

我通过postman调用restpostapi,以X-CSRF-TOKEN作为头。但我得到了下面的错误

Invalid CSRF Token 'wJIJvkev' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.

我尝试用UID和ESAPI生成一个令牌,但仍然出现了错误。我缺少什么?

您需要从服务器获取令牌。你不能只是在客户端生成任意的代码。请参阅需要做什么的示例。因此,我需要有一个单独的rest端点来生成令牌?是的。如果您希望在REST端点上使用CSRF,则需要以某种方式将令牌存储在服务器会话中。这对于基于浏览器的应用程序来说更容易,因为您可以将令牌作为服务器响应页面的一部分写入,并将其用于任何后续请求/Ajax。对于REST,我建议禁用CSRF,除非您使用“写入”动词、
PUT
DELETE
等。如果禁用CSRF,我的应用程序容易受到CSRF攻击,知道吗?顺便问一下,对任何用户的所有后续请求使用相同的csrf令牌可以吗?csrf请求只影响“写入”类型的请求。如您所知,攻击者无法读取到外域的请求结果;它们攻击“盲”——当向资源发送
PUT
DELETE
类型请求时,该漏洞就会出现。如果RESTAPI是可变的,那么是的,您将容易受到攻击。至于问题的第二部分;不,可能不是;在安全应用程序中,CSRF令牌是定期循环的。您需要从服务器获取令牌。你不能只是在客户端生成任意的代码。请参阅需要做什么的示例。因此,我需要有一个单独的rest端点来生成令牌?是的。如果您希望在REST端点上使用CSRF,则需要以某种方式将令牌存储在服务器会话中。这对于基于浏览器的应用程序来说更容易,因为您可以将令牌作为服务器响应页面的一部分写入,并将其用于任何后续请求/Ajax。对于REST,我建议禁用CSRF,除非您使用“写入”动词、
PUT
DELETE
等。如果禁用CSRF,我的应用程序容易受到CSRF攻击,知道吗?顺便问一下,对任何用户的所有后续请求使用相同的csrf令牌可以吗?csrf请求只影响“写入”类型的请求。如您所知,攻击者无法读取到外域的请求结果;它们攻击“盲”——当向资源发送
PUT
DELETE
类型请求时,该漏洞就会出现。如果RESTAPI是可变的,那么是的,您将容易受到攻击。至于问题的第二部分;不,可能不是;在安全应用程序中,CSRF令牌定期旋转。