重複の可能性:
Googleがwhile(1)を付加するのはなぜですか。彼らのJSON応答に?
Googleは次のようにjsonを返します:
throw 1; <dont be evil> { foo: bar}
Facebookのajaxには次のようなjsonがあります。
for(;;); {"error":0,"errorSummary": ""}
- なぜ彼らは実行を停止して無効なjsonを作るコードを置くのですか?
- それが無効である場合、彼らはそれをどのように解析し、あなたがそれを評価しようとするとクラッシュするでしょうか?
- 彼らはそれを文字列から削除するだけですか(高価なようです)?
- これにはセキュリティ上の利点はありますか?
それがセキュリティ目的であることに応じて:
スクレーパーが別のドメインにscript
ある場合、XHRはクロスドメインで機能しないため、データを取得するためにタグを使用する必要があります。for(;;);
攻撃者はどのようにしてデータを取得するのでしょうか。変数に割り当てられていないので、参照がないためにガベージコレクションされるだけではないでしょうか。
基本的に、データをクロスドメインで取得するには、彼らがしなければならないでしょう
<script src="http://target.com/json.js"></script>
ただし、クラッシュスクリプトが付加されていなくても、攻撃者は、グローバルにアクセスできる変数に割り当てられていない限り、Jsonデータを使用できません(これらの場合はそうではありません)。クラッシュコードがなくても、サイトのデータを使用するにはサーバーサイドスクリプトを使用する必要があるため、クラッシュコードは事実上何もしません。