ベストプラクティス:合法的なクロスサイト スクリプティング

StackOverflow https://stackoverflow.com/questions/52646

  •  09-06-2019
  •  | 
  •  

質問

クロスサイト スクリプティングは一般的に否定的なものとみなされていますが、私はクロスサイト スクリプティングが必要な状況に何度か遭遇しました。

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

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

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

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

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

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

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

役に立ちましたか?

解決

選択肢は 3 つあります。

  1. を作成します サーバー側プロキシスクリプト.
  2. リモート動的 HTML を読み取るリモート スクリプトを作成します。次のようなライブラリを使用します jQuery これを簡単にするために。使用できます 負荷関数 必要な場所に HTML を挿入します。 編集 たとえば 2 で私が当初意図したのは、 JSONP, 、「callback =?」を認識するためにサーバー側のスクリプトが必要です。パラメーション。

  3. 使う クライアント側のフラッシュプロキシ そしてセットアップ クロスドメイン.xml ファイルはサーバーの Web ルートにあります。

他のヒント

個人的には、他のドメインに電話をかけると思います サーバー上で そして、ページで使用するためにそこにあるデータを取得して解析します。そうすることで問題を回避し、データの取得と解析にサーバー側の言語/プラットフォームの力を活用できます。

それがあなたの特定のシナリオで機能するかどうかはわかりません...あなたの冗長な説明でも知るのは困難です...

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

私はそれに遭遇しました YDNサーバー側プロキシスクリプト 前に。Yahooの検索APIと連携するように構築されているという。

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

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]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top