【问题标题】:To get around the ajax 'same origin policy', code for a PHP ajax request forwarder?为了绕过 ajax 的“同源策略”,PHP ajax 请求转发器的代码?
【发布时间】:2011-06-22 13:16:45
【问题描述】:

我想绕过 ajax 同源策略,方法是在我的网站上创建一个基本上类似于 JSON 代理的 php 页面。例如,我发出这样的 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 的选项。

谢谢大家

【问题讨论】:

    标签: php javascript ajax same-origin-policy


    【解决方案1】:

    好的,这里有一些东西 - 把它拍成一个 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');
    

    【讨论】:

    • 你错过了 curl_exec 的 $ch 参数...花了一段时间才弄清楚!
    • 效果很好,谢谢。这仅适用于开发工作,因此安全性不应该太重要。再次感谢
    猜你喜欢
    • 2013-04-07
    • 2011-05-28
    • 2010-11-13
    • 1970-01-01
    • 2014-03-17
    • 2012-12-30
    • 2012-08-22
    • 2011-07-20
    • 2016-05-08
    相关资源
    最近更新 更多