while(1);
Google が(プライベートな) JSON 応答の先頭に JSON を追加するのはなぜですか?
たとえば、カレンダーをオン/オフにしたときの応答は次のようになります。Googleカレンダー:
while (1);
[
['u', [
['smsSentFlag', 'false'],
['hideInvitations', 'false'],
['remindOnRespondedEventsOnly', 'true'],
['hideInvitations_remindOnRespondedEventsOnly', 'false_true'],
['Calendar ID stripped for privacy', 'false'],
['smsVerifiedFlag', 'true']
]]
]
これは、人々がそれに対して を実行するのを防ぐためだと思いますeval()
が、実際に行う必要があるのは を置き換えることだけですwhile
。そうすれば設定は完了です。 eval 防止は、人々が安全な JSON 解析コードを記述できるようにするためのものだと思います。
他のいくつかの場所でもこの方法が使われているのを見たことがありますが、Google(メール、カレンダー、連絡先など)での使用が最も多くなっています。不思議なことに、Googleドキュメント代わりには で始まり&&&START&&&
、Google コンタクトは で始まるようですwhile(1); &&&START&&&
。
何が起きてる?
ベストアンサー1
それは防ぐJSONハイジャック、正式にはJSONのセキュリティ上の大きな問題である修理済みすべての主要ブラウザで2011年以降ECMAScript 5 を使用します。
mail.google.com/json?action=inbox
わざとらしい例: Google が、受信トレイの最初の 50 件のメッセージを JSON 形式で返すURL を持っているとします。他のドメインの悪意のある Web サイトは、同一生成元ポリシーにより、このデータを取得するために AJAX リクエストを行うことはできませんが、<script>
タグを介して URL を含めることができます。この URL は Cookie とともにアクセスされ、グローバル配列コンストラクタまたはアクセサメソッドをオーバーライドするオブジェクト (配列またはハッシュ) 属性が設定されるたびに呼び出されるメソッドを持つことができ、JSON コンテンツを読み取ることができます。
またはwhile(1);
は&&&BLAH&&&
これを防ぎます。 の AJAX リクエストはmail.google.com
テキスト コンテンツに完全にアクセスでき、それを削除できます。ただし、<script>
タグ挿入は JavaScript を処理せずに盲目的に実行し、無限ループまたは構文エラーを引き起こします。
これは、クロスサイトリクエストフォージェリ。