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 に答える