ป้องกันการโจมตี CSRF ใน grails หรือไม่

ฉันทำงานกับ 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')
            }
        }
    }
}

โค้ดชิ้นนี้ไม่ทำงานตามที่คาดไว้ หน้าใน UI จะว่างเปล่าเมื่อฉันคลิกสิ่งใดๆ ครั้งล่าสุดที่ฉันตรวจสอบว่า "Origin" มาเป็นโมฆะ ใครสามารถช่วยฉันเกี่ยวกับปัญหานี้?


person Dheeraja    schedule 01.08.2017    source แหล่งที่มา


คำตอบ (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

person sbglasius    schedule 01.08.2017
comment
จริง. ความผิดฉันเอง. :) - person sbglasius; 12.08.2019