Предотвратить атаку CSRF в Grails?

Я работаю на Граале 2.2.1. Я прошел через множество ссылок, касающихся CSRF для реализации в моем проекте.

Защита Grails 3 от CSRF

Grails — есть ли рекомендуемый способ борьбы с CSRF-атаками в формах AJAX?

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

Выше приведены лишь немногие из многих ссылок, через которые я прошел.

Теперь, возвращаясь к моему вопросу. Я не хочу использовать "withform" или ".invalidtoken".

Я хочу использовать уже существующий файл RequestHeaderFilter.groovy. Я хочу использовать заголовок запроса для проверки заголовка источника.

Пожалуйста, найдите фрагмент кода ниже.

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')
            }
        }
    }
}

Этот фрагмент кода не работает должным образом. Страница в пользовательском интерфейсе становится пустой, когда я когда-либо нажимаю на что-либо. В последний раз я проверял, что «Происхождение» имеет значение null. Может ли кто-нибудь помочь мне с этой проблемой?


person Dheeraja    schedule 01.08.2017    source источник


Ответы (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

person sbglasius    schedule 01.08.2017
comment
Истинный. Виноват. :) - person sbglasius; 12.08.2019