20

クロスサイトスクリプティングは一般的にネガティブと見なされていますが、私はそれが必要ないくつかの状況に遭遇しました。

私は最近、非常に限定的なコンテンツ管理システムの範囲内で作業していました。ページ内にデータベースコードを含める必要がありましたが、ホスティングサーバーには使用可能なものがありませんでした。私は自分のサーバーにいくつかの必要最低限​​のスクリプトを設定しました。当初は、AJAXを使用してスクリプトのコンテンツをCMSのテンプレートに直接インポートできると考えていました(したがって、動的画像、メニュー項目、CSSなどを保持します)。私は間違っていた。

オブジェクトの制限によりXMLHttpRequest、別のドメインからコンテンツを取得することはできません。だから私はiFrameを考えました-私はフレームのファンではありませんが、コンテンツの幅と高さに一致するフレームを作成して、ネイティブに見えるようにできると思いました。繰り返しになりますが、私はクロスサイトスクリプティングの「保護」によってブロックされました。確かにリモートファイルをiFrameにロードすることはできましたが、JavaScriptを実行して、ホストページまたはロードされたページ内でそのサイズを変更することはできませんでした。

この特定のシナリオでは、サブドメインをサーバーにポイントできませんでした。 また、サーバーからコンテンツをプロキシできるスクリプトをCMSサーバー上に作成できなかったため、最後に考えたのはリモートJavaScriptを使用することでした。

リモートJavaScriptが機能します。ユーザーがJavaScriptを無効にすると壊れますが、これは欠点です。しかし、それは機能します。リモートJavaScriptを使用する際に抱えていた「問題」は、document.write()コンテンツを出力するためにJS関数を使用する必要があることでした。JS以外の出力は、スクリプトエラーの原因になります。document.write()すべての行に使用することに加えて、コンテンツがエスケープされていることを確認する必要があります。そうしないと、スクリプトエラーが増えることになります。

私の解決策は次のとおりです。

私のスクリプトはGETパラメーター( "page")を受け取り、ファイル()を探し、{$page}.phpその内容を変数に読み込みました。ただし、含まれているスクリプトを実際に実行して(データベースの相互作用など)、すべての改行文字(\n)の最終コンテンツを削除してから、必要なすべての文字をエスケープするには、厄介なバッファリング手法を使用する必要がありました。最終結果は、元のスクリプト(JavaScriptを出力する)がサーバー上の「標準」のように見えるスクリプトにアクセスし、CMSテンプレート内に表示するためにそれらの標準出力をJavaScriptに変換することです。

この解決策は機能しますが、同じことを達成するためのより良い方法があるようです。完全に異なるドメインのコンテンツを含めることを目的として、クロスサイトスクリプティングを機能させるための最良の方法は何ですか?

4

5 に答える 5

14

3つの選択肢があります。

  1. サーバー側のプロキシスクリプトを作成します。
  2. リモートダイナミックHTMLで読み取るリモートスクリプトを作成します。これを簡単にするために、jQueryのようなライブラリを使用してください。load関数を使用して、必要に応じてHTMLを挿入できます。編集私が最初に意味したのは、たとえば#2はJSONPを利用することでした。これには、サーバー側のスクリプトが「callback =?」を認識する必要があります。パラメータ。

  3. クライアント側のFlashプロキシを使用して、サーバーのWebルートにcrossdomain.xmlファイルを設定します。

于 2008-09-09T20:01:19.863 に答える
2

個人的には、サーバー上の他のドメインを呼び出して、そこにあるデータを取得して解析し、ページで使用します。そうすれば、問題を回避し、データを取得して解析するためのサーバー側の言語/プラットフォームの機能を利用できます。

それがあなたの特定のシナリオでうまくいくかどうかわからない...あなたの詳細な説明でも知るのは難しい...

于 2008-09-09T19:12:55.300 に答える
1

easyXDMを試すことができます。ごくわずかなコードを含めることで、異なるドメインのドキュメント間でデータまたはメソッド呼び出しを渡すことができます。

于 2009-07-05T21:32:53.183 に答える
0

iframeリモートコンテンツには、ローカルjavascriptからアクセスできます。

リモートサーバーdocument.domainは、ページのを設定するだけです。

例えば:

サイトAにはiframeが含まれていますsrc='Site B/home.php'

home.phpは次のようになります:

[php stuff]...[/php]
[script type='text/javascript']document.domain='Site A'[/script]
于 2010-05-10T12:27:27.620 に答える
0

以前、 YDN サーバー側のプロキシ スクリプトに出くわしたことがあります。Yahoo の検索 API と連携するように構築されているとのことです。

Yahoo API コードを削除するだけで、どのドメインでも動作しますか? それとも、動作させたいドメインに置き換える必要がありますか?

于 2008-09-15T17:43:08.663 に答える