最近我们实施了 OWASP CSRF
安全令牌概念来处理 CSRF
攻击 . 我使用下面的链接作为参考来实现
https://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project
https://github.com/aramrami/OWASP-CSRFGuard
pom.xml
<dependency>
<groupId>org.owasp</groupId>
<artifactId>csrfguard</artifactId>
<version>3.0.0.590</version>
</dependency>
我对我的项目进行了所有必要的更改 . 现在我能够看到 OWASP_CSRFTOKEN
作为请求标头的一部分 .
Problem:
在我的项目中,我们正在使用 Extjs 4
. 实现更改后,所有ajax调用都成功携带 OWASP_CSRFTOKEN
令牌 .
我们确实有一个 Hidden Iframe
用于从服务器下载一些excel文件 . 当我检查这个请求时,它没有携带 OWASP_CSRFTOKEN
令牌,在服务器日志中我可以看到以下消息 .
Logs:
Nov 21, 2017 2:53:47 PM org.owasp.csrfguard.log.JavaLogger log
WARNING: potential cross-site request forgery (CSRF) attack thwarted (user:<anonymous>,
ip:0:0:0:0:0:0:0:1, method:%request_method%, uri:/aaa/template/onDemandTemplate.action,
error:required token is missing from the request)
Iframe code:
var body = Ext.getBody(),
frame = body.createChild({
tag:'iframe',
cls:'x-hidden',
id:'hiddenform-iframe',
name:'iframe'
}),
form = body.createChild({
tag:'form',
cls:'x-hidden',
id:'hiddenform-form',
action: url,
method: POST,
target:'iframe'
});
var hiddenItem = document.createElement('input');
Ext.fly(hiddenItem).set({
type: 'hidden',
value: Ext.encode(params),
name: 'reportingParams'
});
form.appendChild(hiddenItem);
form.dom.submit();
隐藏的Iframes内部是否使用ajax?
如何在Iframe reqeusts中手动注入CSRF令牌?
如果任何人有更好的方法/选择来处理这种情况 . 请分享您的想法 .
谢谢
1 回答
没有iframe不使用ajax . 但是,iframe之类的功能可以通过ajax实现 .
如果您要使用Iframes,则为CSRF令牌添加第二个隐藏输入 .
Code :