【问题标题】:How to inject CSRFGuard security tokens using jQuery using $.ajax如何使用 $.ajax 使用 jQuery 注入 CSRFGuard 安全令牌
【发布时间】:2016-07-08 15:08:39
【问题描述】:

我正在使用 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, 错误:请求中缺少所需的令牌)

当浏览器加载预期 /JavaScriptServlet 将注入令牌的 userProfile.jsp 文件时,浏览器向我显示 404 not found for this specific html call

我正在使用: JDK 1.6 CSRFGuard 3.1.0 Weblogic 10.3.6 & jQuery-1.7.1-min.js 请指导我如何在此 AJAX 调用中注入这些令牌! 提前致谢!!

【问题讨论】:

    标签: jquery ajax csrf csrf-protection


    【解决方案1】:

    要使 ajax 调用正常工作,您需要执行以下步骤:

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

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

    2) 在

    等元标记中注入安全令牌名称和值
    <meta name="_csrf_header" content="<csrf:tokenname/>"/> 
        <meta name="_csrf" content="<csrf:tokenvalue/>"/>
    

    3) 在 .js 页面上将这些值注入到标题中,例如

    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调用工作无关紧要

    谢谢

    【讨论】:

    猜你喜欢
    • 2015-10-02
    • 2022-01-19
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 2020-01-28
    • 2014-03-26
    相关资源
    最近更新 更多