【问题标题】:Prevent CSRF attack in grails?防止grails中的CSRF攻击?
【发布时间】:2018-01-08 03:23:47
【问题描述】:

我在 grails 2.2.1 上工作。我已经通过许多关于 CSRF 的链接在我的项目中实施。

Grails 3 CSRF protection

Grails - Is there a recommended way of dealing with CSRF attacks in AJAX forms?

http://www.redtoad.ca/ataylor/2011/01/grails-cross-site-request-forgeries-csrf/

以上是我浏览过的众多链接中的一小部分。

现在,回到我的问题。我不想使用“withform”或“.invalidtoken”。

我想使用已经存在的 RequestHeaderFilter.groovy 文件。我想使用请求头来验证源头。

请在下面找到代码sn-p。

class ResponseHeaderFilters {
    def filters = {
        all(controller: '*', action: '*') {
            before = {

                def serverURL = grailsApplication.config.grails.serverURL ?: "http://localhost"
                //this could/should be improved upon if serverURL is not set in one of our config files
                //def OriginPrefix = serverURL.replace("http", "https")
                def requestOrigin = request.getHeader('Origin')

                if (request.getHeader('X-Requested-With')?.equals('XMLHttpRequest')) {

                    if (requestOrigin && requestOrigin == serverURL) {
                        response.setHeader('Expires', '-1')
                        response.setHeader('Cache-Control', 'no-cache')
                        response.addHeader('Cache-Control', 'no-store')
                        response.setHeader('X-UA-Compatible', 'IE=edge')
                    } else {
                        return false
                    }

                }
            }
        }
        addNoCachingHeaders(uri: '/**') {
            after = {
                response.setHeader('Expires', '-1')
                response.addHeader('Cache-Control', 'no-cache')
                response.addHeader('Cache-Control', 'no-store')
                response.setHeader('X-UA-Compatible', 'IE=edge')
            }
        }
    }
}

这段代码没有按预期工作。每当我单击任何内容时,UI 中的页面都会变为空白。 最后我检查了“起源”是否为空。 有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: java grails csrf response-headers


    【解决方案1】:

    在 Grails 3.x 中,您需要使用拦截器而不是过滤器,但功能是相同的。

    class ResponseHeaderInterceptor {
    
        boolean before() { true }
    
        boolean after() { true }
    
        void afterView() {
            // no-op
        }
    }
    

    我将把实现留给你,但请参阅文档了解更多信息:http://docs.grails.org/latest/guide/theWebLayer.html#interceptors

    【讨论】:

    • 是的。我的错。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 2011-03-12
    • 2016-09-12
    • 2013-04-29
    相关资源
    最近更新 更多