クロスサイトスクリプティングは一般的にネガティブと見なされていますが、私はそれが必要ないくつかの状況に遭遇しました。
私は最近、非常に限定的なコンテンツ管理システムの範囲内で作業していました。ページ内にデータベースコードを含める必要がありましたが、ホスティングサーバーには使用可能なものがありませんでした。私は自分のサーバーにいくつかの必要最低限のスクリプトを設定しました。当初は、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に変換することです。
この解決策は機能しますが、同じことを達成するためのより良い方法があるようです。完全に異なるドメインのコンテンツを含めることを目的として、クロスサイトスクリプティングを機能させるための最良の方法は何ですか?