我知道Spring Security在版本3.2.0中添加了内置的CSRF保护,如下所述:http://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/html/csrf.html
我正在使用带有Spring-security-core插件版本2.0.0的Grails 2.4.3,它似乎使用了Spring Security版本3.2.3,但CSRF保护未启用或不存在。
我想知道是否有办法在我缺少的插件中打开它。有没有办法使用此插件链接中提到的配置方法之一?任何帮助,将不胜感激!感谢。
我知道以后的版本默认启用此功能,但升级Grails版本对我来说不是一个选项,而更新版本的spring-security-core插件需要Grails 3。
答案 0 :(得分:1)
据我所知,在任何版本的Grails spring安全插件中都没有默认的CSRF保护。 根据春季安全文档
1)您需要确定您的应用程序正在使用PATCH,POST,PUT和/或DELETE来修改状态
2)在所有PATCH,POST,PUT和DELETE方法中包含CSRF令牌
Grails可以为您生成并检查令牌,只需对所有表单子项使用// Simple method which encrypts all chars in a string
String input = "Hel!lo";
String result = input.chars() // Need to convert into an IntStream
.mapToObj(e -> Character.toUpperCase((char) e)) // Need to map to Object (!) and then cast to char
.map(CryptoMath::encryptChar) // Calling the encryption
.map(String::valueOf) // Need to cast to String again...
.collect(joining("")); // Finally done
System.out.println(result);
即可。检查here。然后你必须修改所有控制器。
否则你必须使用一些自定义解决方案,例如你可以创建一个服务来生成令牌,从gsp调用它:
<g:form useToken="true" ...>
创建一个过滤器,以验证来自每个PATCH,POST,PUT和DELETE请求的令牌
答案 1 :(得分:0)
您可以参考https://stackoverflow.com/a/38053797。
我在grails 2.5.6上实现了这一点。希望这有帮助!