15

一部の json クエリ、特に google サービスでは、終了シーケンスで始まり、角かっこで指定された配列構造だけを持つ独特の「json」を返すことに気付きました。

これはどんなアヤックスですか?それを解析するライブラリ、jsまたはpyはありますか?

より具体的な例を挙げると:

>>> import json
>>> import urllib2
>>> url=urllib2.urlopen("https://plus.google.com/u/0/_/socialgraph/lookup/visible/?o=%5Bnull%2Cnull%2C%22114423404493486623226%22%5D")
>>> url.readline()
")]}'\n"
>>> url.readline()
'\n'
>>> url.readline()
'[["tsg.lac",[]\n'

そこから典型的な配列が続きます。したがって、完全な答えは2行の「ヘッダー」と配列ですが、「ヘッダー」は非常に不可解であり、標準のajaxライブラリからのものなのか、それともこれらの人たちの単なるアイデアなのか疑問に思います。

ああ、Chrome の開発者ツールを使用して実際のクエリを調べると、同じことがわかります。だから私はそれが実際の答えであり、クエリのアーティファクトではないと信じるように誘導されています.

4

1 に答える 1

20

メッセージの冒頭で無効な JSON を使用することは、CSRF とJavaScript の配列コンストラクターに対するトリッキーな攻撃の組み合わせを無効にする 1 つの方法です。

その URL がラップされていない有効な配列を返した場合、アクセスしたサイトは Array 関数をオーバーロードし、その Google+ URL へのスクリプト参照をページに配置/挿入し、ページをロードしただけで非公開/安全なデータを収集できます。

Google 独自のクライアント側コードは、生の応答へのアクセスを提供する従来の XHR 要求を使用しているため、無効な JSON を解析する前に取り除くことができます。リモート サイトは、スクリプト要素の挿入を介してのみアクセスでき、ブラウザがデータを解析する前にデータを前処理する機会がありません。後者は JSONP の動作に似ており、Array コンストラクターが無意識のうちにコールバック関数になっています。

GET 要求に応答して JSON 配列を返す有名なサイトの多くで、同様のアプローチが見られます。for (;;);たとえば、Facebook は でパディングします。これらの Facebook API で CSRF 攻撃を使用しようとすると、ブラウザーはリモート サイトで無限ループに入り、Facebook のプライベート API を参照します。Facebook.com では、クライアント側のコードで JSON.parse() を実行する前にそれを取り除く機会があります。

于 2011-07-04T19:27:16.120 に答える