2017-07-03 1 views
0

Was ich zu erreichen versuche:PUT Anfrage verwandelt sich in OPTIONS ohne anfordern Follow-up aufgrund CORS

So versuche ich, einen POC von CSRF zu erstellen, aber der Server benötigt eine x-CSRF-Token ; was sollte machen es unmöglich machen. Allerdings habe ich einen (ziemlich einfachen) Weg gefunden, einen x-csrf-Token zu senden, der immer gültig ist. Also möchte ich ein POC erstellen, wie man ein Passwort ändert und das X-CSRF-Token mitschickt; AJAX sollte den Job erledigen.

-Code bisher:

<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> 

PROBLEM:

jedoch wegen CORS diese PUT Anfrage verwandelt sich in eine OPTIONS-Anforderung und dann gibt es keine Folge PUT-Anfrage. Die Antwort auf diese Anfrage OPTIONEN ist nur ein einfaches

HTTP/1.1 404

nicht gefunden

FRAGE:

Da es ein externer Server, dass ich nicht besitzen (erklärt die POC) Ich kann Serveränderungen nicht durchführen. Kann ich die Anfrage irgendwie ändern, damit ich den POC noch ausführen kann? Mit anderen Worten, so weit meine Vorstellungskraft reicht, kann ich diese OPTIONS-Anfrage umgehen oder die Anfrage modifizieren, um sicherzustellen, dass diese OPTIONS-Preflight-Anfrage eine Folge-PUT-Anfrage bekommt?

Vielen Dank im Voraus, finden Ihnen einen freundlichen Kaffee kaufen, wenn Sie die Lösung bekommen (wenn das auf Stackoverflow legal ist).

+0

Für POC-Zwecke können Sie eine Browser-Erweiterung wie https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi verwenden, um CORS zu passieren. –

Antwort

0

Nicht mit clientseitigem Code.

Ein Cross-Ursprung PUT Anforderungen erfordert ein Preflight.

Eine stammesübergreifende Anforderung mit nicht standardmäßigen Headern erfordert ein Preflight.

Die Proxy-Anforderung durch einen anderen Server ist Ihre einzige Option.

+0

Ah, danke! Hast du Ratschläge, wie das zu erreichen ist? – mroWsymaS

+0

Weil ich immer noch die Cookies der Person auf www.example.com – mroWsymaS

+0

benötigen, die Sie nicht bekommen können. Sieht so aus, als sei der Server doch nicht anfällig für Ihren CSRF-Angriff. – Quentin