2016-07-04 32 views
1

mit Ich verwende CSRFGuard 3.1.0 Ich habe das Servlet in web.xml konfiguriert

<servlet> 
     <servlet-name>JavaScriptServlet</servlet-name> 
     <servlet-class>org.owasp.csrfguard.servlet.JavaScriptServlet</servlet-class>   
    </servlet> 

    <servlet-mapping> 
     <servlet-name>JavaScriptServlet</servlet-name> 
     <url-pattern>/JavaScriptServlet</url-pattern> 
    </servlet-mapping> 

Jetzt habe ich eine JSP-Datei userProfile.jsp 1) ich das Skript so konfiguriert haben, die Token wie

<script src="/JavaScriptServlet"></script> 
zum Injizieren Jetzt

2) umfassen ich die für diese JSP-Datei gewidmet Skriptdatei jQuery

<script src="../js/userProfile.js" type="text/javascript"> 
</script> 

3) Ich habe Textfeld 1 - für Original-Passwort 4) I Textfeld 2 habe - für neues Passwort 5) Ich habe Textfeld 3 - für Kennwort bestätigt 6) Ich habe eine Schaltfläche Passwort ändern, die machen AJAX-Aufruf an den Server

<button type="button" name="changePswd" id="changePswd">Change password</button> 

7) bei Klick auf diese Schaltfläche ein $ Schnipsel (jQuery) Funktion aufgerufen wird, die in einer js-Datei. Die Funktion ist wie folgt:

$("#changePswd").click(
       function() {      

        $.ajax({ 
          url: location.protocol + "//" +location.host + '/my-project/secure/changePassword.html', 

          data: { 
           username : $('#userName').val(), 
           oldPassword : $('#oldPassword').val(), 
           newPassword : $('#newPassword').val(), 
           retypeNewPassword : $('#retypeNewPassword').val() 

          }, 
          success: function(data) { 
           $("#dialog").dialog('close'); 
           $('#dialog-6').dialog('open'); 

           $('#displayResult-6').html(data); 
          }, 
          error: function(xhr,status,error) { 
           $('#displayResult').html('�V'); 
          } 
       })    
       }); 

8) Und dieser Aufruf von CSRFGuard von

sagen

WARNUNG blockiert wird: 10,48: die Cross-Site Request Forgery (CSRF) Angriff (Benutzer :, ip vereitelt. 5,88, Methode: GET, uri: /my-project/secure/changePassword.html, Fehler: erforderlich Token von der Anforderung fehlen)

Und der, wenn der Browser die userProfile.jsp Datei laden, wo das/JavaScriptServlet ist erwartet, dass Token injizieren, der Browser zeigt mir 404 nicht für diesen bestimmten HTML-Aufruf gefunden

Ich verwende: JDK 1.6 CSRFGuard 3.1.0 Weblogic 10.3.6 & jQuery-1.7.1-min.js Bitte leite mich, wie diese Token in diesem AJAX-Aufruf inejct !! Vielen Dank im Voraus !!

Antwort

0

Um Sie Ajax-Aufruf Arbeit müssen die folgenden Schritte tun:

1) Auf jsp Seite a. den Tag lib

<%@ taglib uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" prefix="csrf" %> 

2) injizieren, um den Sicherheits-Token Name & Wert in den Meta-Tags wie

<meta name="_csrf_header" content="<csrf:tokenname/>"/> 
    <meta name="_csrf" content="<csrf:tokenvalue/>"/> 

3 enthält) auf der Js-Seite diese Werte in den Header injiziert wie

var csrfHeader = $("meta[name='_csrf_header']").attr("content"); 
        var csrfToken = $("meta[name='_csrf']").attr("content"); 
        var headers = {}; 
        headers[csrfHeader] = csrfToken; 
    $.ajaxSetup({ 
    headers: headers 
}); 

Und Ihr Ajax-Anruf sollte den Test von CSRFGuard :)

4)/JavascriptServlet nicht funktioniert oder das Versenden von 404 in seiner Antwort aber es ist relevent nicht die Ajax-Aufruf Arbeit

Dank

+0

ich zu machen habe beeindrucken mit Ihnen beantworten. Also können Sie bitte in diese Abfrage auch schauen, wenn Sie Zeit haben - http: // stackoverflow.com/questions/42095851/csrfguard-request-token-does-not-match-page-token. Danke im Voraus. – Venki