【发布时间】:2014-06-24 06:29:52
【问题描述】:
我正在尝试通过使用 struts 令牌拦截器来保护我的 Web 应用程序免受 CSRF 攻击。
我现在面临的问题是我们的 JSP 页面不止一次调用服务器(当 JSP 转换为 JS 时,一个 struts 令牌被添加到 JS。但是在这个 JS 中有多个 Ajax 请求。我希望我是让自己清楚。),因为令牌拦截器只有对服务器的第一个请求得到验证。其他请求正在失效,因为每次验证后都会重置 struts 令牌。
有没有办法阻止 Struts 在每次验证令牌时重置令牌? 在struts拦截器中是否有任何其他解决方案来处理这个问题。
我也在看tomcatcsrfprotection 模块,我想我也会在这里遇到同样的问题。
managepage.jsp:
<s:token />
<script type="text/javascript">
var strutsToken = "<s:property value="#session['struts.tokens.token']" />";
var requestParams = {mainAction: 'loadGroups','struts.token.name': 'token' , token:strutsToken};
Ext.Ajax.request({
url: 'manageUserAccount.action',
params: Ext.urlEncode(requestParams),
disableCaching: true,
success: this.actionCallback
});
//loading widgets
var requestParams = {mainAction: 'loadusers','struts.token.name': 'token' , token:strutsToken};
Ext.Ajax.request({
url: 'manageUserAccount.action',
params: Ext.urlEncode(requestParams),
disableCaching: true,
success: this.actionCallback
});
</script>
Struts.xml:
<action name="manageUserAccountEdit" class="ManageUserAccountEditAction">
<interceptor-ref name="csrf-protection" />
<result name="success">/pages/manageUserAccount.jsp</result>
</action>
我刚刚添加了最少的代码,以便更容易理解。
【问题讨论】:
-
你是什么意思jsp页面多次调用服务器?
-
我需要在客户端页面中使用同一个令牌发出多个ajax请求。
-
当 jsp 转换为 js 时,会在 js 中添加一个 struts 令牌。在这个 js 中有多个 Ajax 请求。我希望我能说清楚。
-
您需要为每个 ajax 请求使用一个新的令牌。
-
查看我对这个问题的回答:stackoverflow.com/q/18822095/1700321。
标签: java javascript jsp struts2 csrf-protection