gpt4 book ai didi

Grails 3 CSRF 保护

转载 作者:行者123 更新时间:2023-12-02 13:46:24 25 4
gpt4 key购买 nike

是否可以使用 spring-security 插件在 grails3 应用程序中配置 CSRF 保护,除了 grails 表单的 useToken 属性外,我找不到任何东西,然后在 Controller 内部调用 withForm 。但这实际上不是一个非常灵活的解决方案。我喜欢使用过滤器的方法,例如 here

最佳答案

对于 csrf 保护,我重用了 org.springframework.security.web.csrf.CsrfFilter .您需要在 grails resouces.groovy 中定义新的 bean(参见下面的 snipet - csrfFilter bean)。您可以定义自己的 accessDeniedHandler requireCsrfProtectionMatcher .这是来自 resources.groovy 的片段:

csrfFilter(CsrfFilter, new HttpSessionCsrfTokenRepository()) {
accessDeniedHandler = ref('fnAccessDeniedHandler')
requireCsrfProtectionMatcher = ref('fnRequireCsrfProtectionMatcher')
}

现在在 Bootstrap.groovy 中将此过滤器添加到过滤器链中:
 SpringSecurityUtils.clientRegisterFilter('csrfFilter',    SecurityFilterPosition.LAST.order + 10)

现在在您的主布局 GSP 添加以下标签以在每个页面上添加 csrf token :
<meta name="_csrf" content="${_csrf?.token}"/>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" content="${_csrf?.headerName}"/>

所以现在 csrf token 出现在您的应用程序的每个页面上,例如,您可以将其用于每个 ajax 请求(来自 application.js 的片段(我使用的是 grails 3)):
$(function () {
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$(document).ajaxSend(function(e, xhr, options) {
xhr.setRequestHeader(header, token);
});
});

对于每个 jquery ajax 请求,我们现在发送 csrf token 。

关于Grails 3 CSRF 保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36072320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com