2012-01-12 13 views
2

このようなJSONオブジェクトを作成するために十分に簡単です:JS関数でJS関数を渡すXSSの危険性は何ですか?

{ "キー": "値"、 "MyFunctionを":機能(){警告( 'こんにちは'); }}

サーバーから、myFunction()を呼び出すことができるスクリプトに渡します。確かに、機能は機能し、私は警告を得る: "こんにちは"。私にとっては、これはスクリプトサイズを小さく保つ非常に便利な方法です。 しかし、私は、JSONを介したデータだけでなく、関数を渡す際にXSSの危険性があると考えています。誰かがこれが何であるかを説明し、適切であれば、それを否定するためにどのような措置を講じることができますか?

答えて

2

functionは、JSONの一部ではありません.JSONはJavaScriptではないためです。

ほとんどのライブラリはJSONパーサーを使用しています(可能な場合はbrowser's one)。したがって、これは正しく解析されません。 JSONの解析にはevalを使用していますが、悪いです。 evalは一般的に悪です。

あなたは常に<script>を使用してJavaScriptを読み込んでいますので、ここではXSSに関する問題はありません。

0

これは、JSONの読み込みと解析の方法によって異なります。 jQueryを使用し、AJAX経由でデータをロードする場合、そのデータはブラウザの組み込みJSONパーサーに渡され、greutで説明されているように関数をサポートしません。 http://erlend.oftedal.no/blog/misc/json/index.html

は、しかし、あなたがJSONP(その周りの機能をラップする)のいずれかを介して、それをロードする場合、Socialcastはないインスタンスのようなページの最後にスクリプトタグ内に直接それを追加することJSONことで、それは脆弱です。 http://erlend.oftedal.no/blog/misc/json/index2.html

この最後のもので問題が発生した場合は、JSONの値(とキー)を常に ""で囲む必要があります。したがって、信頼できないデータからJSONを構築する場合は、JSONでエンコードする必要があります。これはJavascriptエンコーディングと似ていますが、JSONにはいくつかの追加の特徴があります。たとえば、有効なJSONファイル(有効なjavascriptではありません)は、JSONで許可されている文字が含まれていますが、javascriptでエンコードする必要があるためです。

関連する問題