JSONとXMLの両方が、サーバークライアント通信の媒体として機能します。だから、なぜセキュリティ懸念は1つではなく他のものではないのですか?
基本的な違いは、名前としてのJSON(JavaScript Object Notation)はJavaScriptに非常に近いことであり、JavaScriptメソッドや機能の設計ではJavaScriptがJSON文字列を紅茶のように扱い、解釈しようとしますこれは攻撃者がJavaScriptインタープリタを欺いて脆弱性を引き起こす文字列に埋め込まれた悪質なJavaScriptを実行することを回避するための回避策を提供する一方で、XMLはオブジェクトに解析されて攻撃することを難しくする解析段階を経なければなりません。 このようなJavaScriptの機能は、eval()メソッドとタグです。
これらはどのようにセキュリティの脆弱性を作りますか?ウェブは同一生成元ポリシーを以下のが
、歴史的にそこに抜け穴はそれを迂回することが判明し、悪質なサイトは、同一生成元ポリシーの意図を破る、認証されたユーザのウェブサイトにクロスサイトリクエストを送信するためにそれらを使用しています。
例: 同じオリジンポリシーが設定されているにもかかわらず、ウェブで<img> <script>
などの一部のタグでクロスオリジンGETリクエストを作成できました。
は、私たちは、あなたがウェブサイトwww.authenticatedwebsite.com
上にあるが、www.authenticatedwebsite.com
から、あなたの個人データにアクセスするためのwww.malicious.com
使用このスクリプトタグの挙動から、そのHTML <script src="www.authenticatedwebsite.com/get-user-order-history" />
攻撃でタグを持っているwww.malicious.com
を開くために魅了しましょう。
src urlを呼び出しているスクリプトタグは、JavaScriptレスポンスを悪意のあるサイトサーバーに送信するなどの操作を行うためにjavacriptオブジェクトに格納します。
ここではJSONの役割があり、XMLはここでより安全であることが証明されています。 JavaScriptはJSONをよく理解しているので、一部のJavaScriptインタプリタは有効なJavaScriptとしてnaked JSON文字列を解釈して実行します。
まだ変数に割り当てられていないJSON文字列を実行するにはどうすればよいですか?
これはもう1つの派手なハックで実現できます。 返されたJSON文字列が配列を表す場合。 JavaScriptはArrayクラスのコンストラクタを実行しようとします。これで、JavaScriptのArrayのコンストラクタをオーバーライドすることができます。そのため、あなたの個人データへの悪質なWebサイトへのアクセスを与える、
Array = function(){ yourObject = this };
これは、基本的にはJavaScriptがコンストラクタを呼び出したときに、現在の解釈配列がyourObjectに割り当てられているようにJavaScriptのArrayコンストラクタを、上書きされます。あなたのような何かを行うことができます。
この攻撃は、より洗練されたハッキングを使用して、JSON文字列の変形で使用できます。
上記は有効なシナリオですが、JSONはGET APIのリターン形式として危険な可能性があります。これは実際には一部のブラウザの一部のバージョンでのみ可能ですが、わかっている限り、有名なブラウザのすべての最新バージョンでは軽減されていますが、ユーザーベースをブラウザのバージョンに分けることができるため、GET API非公開のJSON形式で個人情報を提供します。
JSONレスポンス文字列の前にwhile(true)を追加することで、JavaScriptインタープリタが実際の文字列に到達することはありません。しかし、それはあなたのクライアント側で解析のオーバーヘッドを作成します。
JSONが引き起こす可能性のある別の問題は、です。ブラウザクライアント側でeval()
メソッドを使用してJSONを解析しています。 eval()
はスクリプトを実行する機能を持っていますので、あなたのJSON文字列にeval()
が実行され、危険なアクションを実行するいくつかの隠しスクリプトが含まれている場合は、スクリプトに何を入力するかを攻撃者が尋ねます。しかし、他の人が触れたように、この攻撃は、クライアントコードのどこでもJSONパーサーとしてeval()
メソッドを厳密に放棄することで簡単に防止できます。この脆弱性のプラグインは、ユーザーが生成したコンテンツを格納するWebサイトにとって非常に重要です。
"どこでも多くのブログにリンク"を投稿できますか?私はこれを信じるのが難しいと思っています。 –
@Tim Pietzcker http://www.subbu.org/blog/2006/08/json-vs-xmlこれを見てください。しかし、彼が説明しようとしていることは分かりません。最後の点を参照してください。 –
さて、信頼できない情報源からのeval()データに愚かなことをしない限り、あなたは不安がないことを読んでいます。 –