Cegah serangan CSRF di cawan?

Saya mengerjakan grails 2.2.1. Saya telah melalui banyak tautan sehubungan dengan CSRF untuk diterapkan dalam proyek saya.

Perlindungan CSRF Grails 3

Grails - Apakah ada cara yang disarankan untuk menangani serangan CSRF dalam bentuk AJAX?

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

Di atas adalah beberapa dari banyak tautan yang saya lalui.

Sekarang, kembali ke pertanyaan saya. Saya tidak ingin menggunakan "withform" atau ".invalidtoken".

Saya ingin menggunakan file RequestHeaderFilter.groovy yang sudah ada. Saya ingin menggunakan header permintaan untuk memvalidasi header asal.

Silakan temukan cuplikan kode di bawah ini.

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

Potongan kode ini tidak berfungsi seperti yang diharapkan. Halaman di UI menjadi kosong setiap kali saya mengklik apa pun. Terakhir saya memeriksa "Asal" sebagai nol. Adakah yang bisa membantu saya mengatasi masalah ini?


person Dheeraja    schedule 01.08.2017    source sumber


Jawaban (1)


Di Grails 3.x Anda perlu menggunakan Interceptor, bukan Filter, tetapi fungsinya sama.

class ResponseHeaderInterceptor {

    boolean before() { true }

    boolean after() { true }

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

Saya serahkan penerapannya kepada Anda, namun lihat dokumen untuk informasi lebih lanjut: http://docs.grails.org/latest/guide/theWebLayer.html#interceptors

person sbglasius    schedule 01.08.2017
comment
BENAR. Salahku. :) - person sbglasius; 12.08.2019