通常、サーバー A は、別のドメインのマシン B がサーバー A 上のリソースを呼び出すために Ajax を実行できないように設定されています。セキュリティ リスクの簡単な例を次に示します。
ajax がドメインからアクセスできると仮定すると、さまざまな Google Web アプリケーションのリソースをリクエストするための ajax を自分のマシンに作成できます。たとえば、最初に Firefox を使用して、GMail による多数の ajax リクエストのアドレスとパラメーターを調べます。ログインプロセスを取得し、ユーザーの Cookie 検証プロセスを取得します。次に、ドメイン間で他のユーザーの Cookie を取得するための js を記述します。これにより、ユーザーの GMail パスワードをバイパスし、
ajax クロスドメイン制限を使用して
他のユーザーの GMail メールボックスにログインできるようになります。ajaxを使用してドメインアクセスを遮断することは本当に不可能ですか?
確かに、ajax はドメインを壊すことはできませんが、いわゆるプロキシの原理は非常に簡単で、独自の JS とリモート サーバー A のリソースの間に独自のコンテナを設定できます。 asp、php、java、.net など。動的 Web 言語としては、例として asp があります (Redekuai Web サイト上のユーザーの友達リストを取得し、xml データ形式を返します)
<%
p = " http://redekuai.com/api/user_friends_xml/funy "
Response.BinaryWrite ZQcnGet(p)
レスポンス.フラッシュ
関数 ZQcnGet(url)
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
検索あり
.Open "Get"、URL、False、""、""
。送信
ZQcnGet = .ResponseBody
で終わる
取得 = なしを設定します
終了機能
%>
このコードを proxy.asp として保存し、IIS に配置します。この時点で、js を作成するマシンを見つけて、ajax を使用して proxy.asp を要求することになります。 。
PHPのサンプルコードがシンプルになった
echo file_get_contents(" http://redekuai.com/api/user_friends_xml/funy "");
?>
注: PHP のバージョンは 4.3.0 以上である必要があります
。asp.net (C#) バージョンのサンプル コードは次のとおりです
。
System.IO を使用します。
System.Text を使用します。
パブリック部分クラス ajaxpages: System.Web.UI.Page
{
protected void Page_Load(オブジェクト送信者, EventArgs e)
{
WebRequest wr = WebRequest.Create(" http://redekuai.com/api/user_friends_xml/funy ");
WebResponse wres = wr.GetResponse();
エンコーディング resEncoding = System.Text.Encoding.GetEncoding("utf-8");
StreamReader sr = 新しい StreamReader(wres.GetResponseStream(), resEncoding);
文字列 html = sr.ReadToEnd();
Response.Write(html);
sr.Close();
wres.Close();
}
}
それぞれ proxy.asp proxy.php proxy.aspx
では、プロキシとして適切に機能し、自分の一般的なマシン (Web サーバーではない) 上のリモート Web サイト リソースへの JS ドメイン アクセスを可能にすることの実際的な意義は何でしょうか?
ご存知のとおり、現在のインターネット技術は絶対的なマッシュアップの時代に入っています。米国では 2,000 社以上の企業が生き残るために Facebook APP に依存しています。この種の外国産業チェーンは中国では発展できないというのは本当ですか?インターネットも 5 年以内に中国のインフラになることを知っておく必要があります。すでに API を公開している、または公開の準備をしている比較的優れた Web2.0 サイトがあります。