由于CORS,PUT请求变为OPTIONS请求而没有后续操作

时间:2017-07-03 18:17:41

标签: javascript ajax cors csrf put

我想要完成的任务:

所以我试图创建一个CSRF的POC,但是服务器需要一个x-csrf-token;哪个应该使它变得不可能。但是,我发现了一种(非常简单)发送x-csrf-token的方法,它始终有效。所以我想创建一个关于如何更改密码并发送X-CSRF令牌的POC; 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 Not Found

问题:

由于它是我不拥有的外部服务器(解释POC),我无法更改服务器。我可以以某种方式更改请求,以便我仍然可以执行POC;换句话说,就我的想象力而言,我是否可以绕过此OPTIONS请求或修改请求以确保此OPTIONS预检请求获得后续PUT请求?

如果您有解决方案(如果在stackoverflow上合法),会先给您买一杯友好的咖啡

1 个答案:

答案 0 :(得分:0)

不使用客户端代码。

跨源PUT请求需要预检。

使用非标准标题的跨源请求需要预检。

通过其他服务器代理请求是您唯一的选择。