)]}'
Google plus は、最初の行で ajax リクエストを返します。XSSに対する保護だと聞きました。その保護なしでこれを使って誰が何をどのように行うことができるかの例はありますか?
2 に答える
ここで何が起こっているかについての私の最善の推測は次のとおりです。
まず、Google json 形式には、有効な json ではない側面が他にもあります。したがって、保護目的に加えて、この特定の文字列を使用して、ファイルの残りの部分が google-json 形式であり、それに応じて解釈する必要があることを示している可能性があります。
この規則を使用すると、データ フィードがスクリプト タグからの呼び出しから実行されないことも、eval() から直接 JavaScript を解釈することによっても実行されないことを意味します。これにより、フロントエンド開発者はパーサーを介してコンテンツを渡すことができ、埋め込まれたコードが実行されなくなります。
あなたの質問に答えるために、これが防止する 2 つのもっともらしい攻撃があります。1 つはスクリプト タグを介したクロスサイトですが、より興味深いのはサイト内です。どちらの攻撃も、次のことを前提としています。
- ユーザーデータのエスケープ方法にバグが存在し、
- 攻撃者がデータ フィードの 1 つにコードを挿入できるように悪用されます。
簡単な例として、ユーザーが例のような文字列を取る方法を考え出したとしましょう
["example"]
それを"];alert('example');に変更しました。
[""];alert('example');"]
そのデータが別のユーザーのフィードに表示された場合、攻撃者はユーザーのブラウザーで任意のコードを実行できます。サイト内にあるため、Cookie がサーバーに送信され、攻撃者は投稿の共有やユーザーのアカウントからのメッセージ送信などを自動化できます。
Google のシナリオでは、これらの攻撃はさまざまな理由で機能しません。最初の 5 文字は、攻撃コードが実行される前に JavaScript エラーを引き起こします。さらに、開発者は誤って eval を介してコードを実行するのではなく、コードを解析することを余儀なくされるため、この方法によりコードが実行されるのを防ぐことができます。
他の人が言ったように、それはクロスサイトスクリプション(XSSI)に対する保護です
グリュイエールでこれを次のように説明しました。
第三に、スクリプトが実行可能でないことを確認する必要があります。これを行う標準的な方法は、])} while(1);のように、実行不可能なプレフィックスを追加することです。同じドメインで実行されているスクリプトは、応答の内容を読み取ってプレフィックスを削除できますが、他のドメインで実行されているスクリプトはできません。