如何绕过Access-Control-Allow-Origin?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (27)

我正在他们设置的平台上对我自己的服务器执行ajax调用,以防止这些ajax调用(但我需要它从我的服务器获取数据以显示从我的服务器数据库中检索到的数据)。我的ajax脚本正在工作,它可以将数据发送到我的服务器的php脚本以允许它处理。但是,由于被阻止,它无法将处理的数据恢复"Access-Control-Allow-Origin"

我无法访问该平台的源/内核。所以我不能删除不允许我这样做的脚本。(P / SI使用Google Chrome的控制台并发现此错误)

Ajax代码如下所示:

 $.ajax({
     type: "GET",
     url: "http://example.com/retrieve.php",
     data: "id=" + id + "&url=" + url,
     dataType: 'json',   
     cache: false,
     success: function(data)
      {
        var friend = data[1];              
        var blog = data[2];           
        $('#user').html("<b>Friends: </b>"+friend+"<b><br> Blogs: </b>"+blog);

      } 
  });

或者是否有JSON与上面的ajax脚本等效的代码?我认为JSON是允许的。

提问于
用户回答回答于

把它放在retrieve.php的顶部

 header('Access-Control-Allow-Origin: *');  

header()必须注意的是必须在发送任何实际输出之前调用它。

错误

<html>
<?php
header('Access-Control-Allow-Origin: *'); 
?>

正确

<?php
header('Access-Control-Allow-Origin: *'); 
?>
<html>
用户回答回答于

好的,但你们都知道*是通配符,并且允许来自每个域的跨站点脚本?

为什么不把自己的,可信任的域名(和协议)列入清单;

 header('Access-Control-Allow-Origin: http://mysite1.com', false);
 header('Access-Control-Allow-Origin: http://example.com', false);
 header('Access-Control-Allow-Origin: https://www.mysite2.com', false);
 header('Access-Control-Allow-Origin: http://www.mysite2.com', false);

这更安全。(第二个参数“false”指示header()函数不覆盖旧函数)

为什么更安全?

允许从其他位置访问,那么您自己的可信站点允许会话劫持。这意味着你可以抓取您网站访问者的Facebook登录信息。更糟糕的是,POST只需在浏览你的网站时。

使用ACAO标头时要非常谨慎!

扫码关注云+社区