首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用CSRFGuard使用jQuery注入$.ajax安全令牌

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

Stack Overflow用户
提问于 2016-07-04 09:13:18
回答 1查看 2.7K关注 0票数 2

我使用的是CSRFGuard 3.1.0,我在web.xml中配置了servlet

代码语言:javascript
复制
<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),我已经配置了用于注入令牌的脚本,如

代码语言:javascript
复制
<script src="/JavaScriptServlet"></script>

2)现在我包含了专门用于这个JSP文件的jQuery脚本文件。

代码语言:javascript
复制
<script src="../js/userProfile.js" type="text/javascript">
</script>

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

代码语言:javascript
复制
<button  type="button" name="changePswd" id="changePswd">Change password</button>

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

代码语言:javascript
复制
$("#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');
                            }
                })              
                });

这个电话被CSRFGuard阻止了,因为它说

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

当浏览器加载userProfile.jsp文件时,期望/JavaScriptServlet注入令牌时,浏览器将显示这个特定html调用未找到404。

我使用的是:JDK1.6 WebLogic3.1.0WebLogic10.3.6&jQuery1.7.1-min.js,请指导我如何在这个AJAX调用中使用这些标记!!提前谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-08 07:01:11

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

1)在jsp页面a上,包含标记lib。

代码语言:javascript
复制
<%@ taglib uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" prefix="csrf" %>

2)在元标记中插入安全令牌名称和值,如

代码语言:javascript
复制
<meta name="_csrf_header" content="<csrf:tokenname/>"/> 
    <meta name="_csrf" content="<csrf:tokenvalue/>"/>

3)在.js页面上,将此值注入标题中,如下所示

代码语言:javascript
复制
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调用正常运行并不重要。

谢谢

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38180900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档