如何使用$ .ajax使用jQuery注入CSRFGuard安全性令牌

时间:2016-07-04 09:13:18

标签: jquery ajax csrf csrf-protection

我正在使用CSRFGuard 3.1.0 我在web.xml中配置了servlet

<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>

现在我有一个JSP文件userProfile.jsp 1)我已经配置了用于注入令牌的脚本,如

<script src="/JavaScriptServlet"></script>

2)现在我包含专用于此JSP文件的jQuery脚本文件

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

3)我有文本框1 - 原始密码 4)我有文本框2 - 用于新密码 5)我有文本框3 - 用于确认密码 6)我有一个更改密码按钮,它使AJAX调用服务器

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

7)单击此按钮,将调用$ .ajax(jQuery)函数,该函数位于js文件中。功能如下:

$("#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)此次通话被CSRFGuard阻止

警告:潜在的跨站点请求伪造(CSRF)攻击受阻(用户:,ip:10.48.5.88,方法:GET,uri:/my-project/secure/changePassword.html,  错误:请求中缺少必需的令牌)

当浏览器加载userProfile.jsp文件时,/ JavaScriptServlet应该注入令牌,浏览器显示我找不到404这个特定的html调用

我正在使用: JDK 1.6 CSRFGuard 3.1.0 Weblogic 10.3.6&amp; jQuery的1.7.1-min.js 请指导我如何在这个AJAX调用中对这些令牌进行inejct !! 在此先感谢!!

1 个答案:

答案 0 :(得分:0)

要进行ajax调用,您需要执行以下步骤:

1)在jsp页面上   一个。包含标签lib

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

2)注入安全令牌名称&amp;元标记中的值,如

<meta name="_csrf_header" content="<csrf:tokenname/>"/> 
    <meta name="_csrf" content="<csrf:tokenvalue/>"/>
在.js页面上的

3)在头文件中注入这些值,如

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

你的ajax调用应该通过CSRFGuard测试:)

4)/ JavascriptServlet无效或在其响应中发送404 但是让ajax调用工作并不相关

由于