2

我想通过在我的网站上有一个基本上像 JSON 代理一样的 php 页面来绕过 ajax 同源策略。例如,我发出这样的 ajax 请求:

mysite.com/myproxy.php?url=blah.com/api.json&a=1&b=2

然后它会请求:

blah.com/api.json?a=1&b=2

并将 JSON(或其他)结果返回给原始请求者。现在我假设如果我编写这个 php 代码(加上我不知道 php!),我会愚蠢地重新发明轮子 - 是否有一些预先存在的代码可以做到这一点?我敢肯定,我不是唯一一个反对同源政策的人。

哦,是的 JSONP 不是这个特定 api 的选项。

谢谢大家

4

1 回答 1

5

好的,这里有一些东西 - 把它放到一个 php 脚本中,像这样调用它 script.php?url=blah

将您要发布的内容发布到服务器。

<?php


$curlPost = http_build_query($_POST);
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $_GET['url']);
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); 
$data = curl_exec($ch); 
curl_close($ch); 

echo json_encode($data);
 ?>

现在这个脚本对我来说有点太开放了,所以为了提高安全性,我建议您将域列表添加到白名单中。

因此,将其添加到顶部:

$whitelist = array('http://www.google.com','http://www.ajax.com');
$list = array();
foreach($whitelist as $w)
 $list[] = parse_url($w,PHP_URL_HOST);

$url = $_GET['url'];
$url = pathinfo($url,PHP_URL_HOST);
if(!in_array($url, $list)) die('no access to that domain');
于 2011-02-07T06:15:35.133 回答