繁体   English   中英

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

[英]PUT Request turns into OPTIONS Request with no follow up due to CORS

我要完成的工作:

因此,我正在尝试创建CSRF的POC,但是服务器需要一个x-csrf-token。 应该使其成为不可能。 但是,我发现了一种发送x-csrf令牌的方式(非常简单),该方式始终有效。 因此,我想创建一个如何更改密码并发送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

题:

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

在此先感谢您,如果您有解决方案, 将为您购买友好的咖啡 (如果在stackoverflow上是合法的)。

没有客户端代码。

跨域PUT请求需要进行预检。

具有非标准标头的跨域请求需要进行预检。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM