1. ホーム
  2. javascript

[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?

2022-03-13 08:25:06

質問

なぜGoogleは while(1); を(非公開の)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 Contacts は while(1); &&&START&&& .

どうなってるんだ?

解決方法は?

を防ぐことができます。 JSONハイジャック という、JSONのセキュリティの大きな問題で、正式には 修正済み すべての主要なブラウザで 2011年以降 ECMAScript 5を使用しています。

例えば、Google が次のような URL を持っているとします。 mail.google.com/json?action=inbox このメッセージは、受信箱の最初の50通をJSON形式で返します。他のドメインの邪悪なウェブサイトは、同一生成元ポリシーにより、このデータを取得するためのAJAXリクエストを行うことはできませんが、このURLを <script> タグを使用します。URLの訪問は あなたの クッキー、および グローバル配列のコンストラクタやアクセッサメソッドをオーバーライドする。 オブジェクト(配列またはハッシュ)属性が設定されるたびに呼び出されるメソッドを持つことができ、JSONコンテンツを読み取ることができるようになります。

while(1); または &&&BLAH&&& でのAJAXリクエストは、これを防止します。 mail.google.com はテキストコンテンツに完全にアクセスすることができ、それを取り除くことができます。しかし <script> タグの挿入は、JavaScriptを何も処理せずに盲目的に実行するため、無限ループかシンタックスエラーになります。

の問題には対応していません。 クロスサイトリクエストフォージェリ .