2017-08-01 94 views
1

我在Grails上工作2.2.1。我已經通過與CSRF的許多鏈接在我的項目中實施。在grails中防止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文件。我想使用請求頭來驗證原始頭。

請找到下面的代碼片段。

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

這段代碼不能按預期工作。當我點擊任何東西時,用戶界面中的頁面變爲空白。 最後我檢查了「Origin」是否爲空。 有人可以幫我解決這個問題嗎?

回答

-1

在Grails 3.x中,您需要使用Interceptor而不是Filter,但功能相同。

class ResponseHeaderInterceptor { 

    boolean before() { true } 

    boolean after() { true } 

    void afterView() { 
     // no-op 
    } 
} 

我會離開的實施給你,但確實看到該文檔的詳細資料:http://docs.grails.org/latest/guide/theWebLayer.html#interceptors

+0

的問題是關於Grails的2.2,如果我正確讀取。 – GLaDOS