2017-08-01 4 views
1

Je travaille sur les grails 2.2.1. J'ai parcouru de nombreux liens en ce qui concerne CSRF à mettre en œuvre dans mon projet.Prévenir l'attaque CSRF dans les grails?

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/

ci-dessus sont quelques-uns des nombreux liens que je suis allé à travers.

Maintenant, revenons à ma question. Je ne veux pas utiliser "withform" ou ".invalidtoken".

Je souhaite utiliser le fichier RequestHeaderFilter.groovy qui s'y trouve déjà. Je veux utiliser l'en-tête de demande pour valider l'en-tête d'origine.

Veuillez trouver ci-dessous l'extrait de code.

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

Ce morceau de code ne fonctionne pas comme prévu. La page dans l'interface utilisateur devient vide lorsque je clique sur n'importe quoi. Dernière fois que j'ai vérifié le "Origine" vient comme nulle. Quelqu'un peut-il m'aider avec ce problème?

Répondre

-1

Dans Grails 3.x, vous devez utiliser un intercepteur au lieu d'un filtre, mais la fonctionnalité est la même.

class ResponseHeaderInterceptor { 

    boolean before() { true } 

    boolean after() { true } 

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

Je vais laisser la mise en œuvre à vous, mais ne voir la documentation pour plus d'informations: http://docs.grails.org/latest/guide/theWebLayer.html#interceptors

+0

La question était sur Grails 2.2, si je lis correctement. – GLaDOS