如何绕过访问控制-允许-源?

2022-08-30 00:49:09

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

我无法访问该平台的源代码/核心。所以我不能删除它不允许我这样做的脚本。(P / S我使用谷歌浏览器的控制台并发现了这个错误)

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

      } 
  });

还是有与上面的ajax脚本等效的代码?我认为这是允许的。JSONJSON

我希望有人能帮助我。


答案 1

把它放在检索之上.php:

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

请注意,这会有效地禁用 CORS 保护,并使用户容易受到攻击。如果您不完全确定是否需要允许所有源,则应将其锁定为更具体的源:

header('Access-Control-Allow-Origin: https://www.example.com');

请参阅以下堆栈答案,以便更好地理解Access-Control-Allow-Origin

https://stackoverflow.com/a/10636765/413670


答案 2

警告,Chrome(和其他浏览器)会抱怨如果您遵循其他一些答案,则会抱怨设置了多个ACAO标头。

错误将是类似于 XMLHttpRequest 无法加载 ____。“访问控制-允许-源”标头包含多个值“____、____、____”,但只允许一个值。因此,不允许访问源“____”。

试试这个:

$http_origin = $_SERVER['HTTP_ORIGIN'];

$allowed_domains = array(
  'http://domain1.com',
  'http://domain2.com',
);

if (in_array($http_origin, $allowed_domains))
{  
    header("Access-Control-Allow-Origin: $http_origin");
}