JSONハイジャック に対する最善の防御は何ですか?
誰でも標準的な防御を列挙して、その長所と短所を説明できますか?ここに私が見てきたいくつかの防御策があります:
while(1);
を置き、JSONを解析する前にクライアントにそれを取り除いてもらいます。これらはすべて安全ですか?これらのいずれかを他のものよりも選択する理由はありますか?他に見逃している防御策はありますか?
最初の防御策は、有効なJSONを使用して仕様に固執することです 最上位エンティティとしてオブジェクトが必要 。すべての既知の攻撃は、最上位のオブジェクトが配列の場合、応答は有効であるという事実に基づいていますJava <script>タグを使用して解析できるスクリプトコード。
JSON応答に機密/非公開データが含まれている場合、要求が認証された場合にのみ応答を提供します(たとえば、認証されたセッションを示すCookieが付属しています)。
これは、軽減策ではなく、攻撃の前提条件です。ブラウザにサイトAのCookieがある場合、サイトAへのすべてのリクエストにそれが含まれます。リクエストがサイトBの<script>タグによってトリガーされた場合も同様です。
JSONデータに機密情報または非公開情報が含まれている場合は、推測不可能な秘密のURL(128ビットの暗号品質の乱数を含むURLなど)でホストし、この秘密のURLを、閲覧を許可されたユーザー/クライアントとのみ共有します。データ。
URLはセキュリティ機能とは見なされません。一般的なすべての検索エンジンには、アクセスしたURLを検索エンジンベンダーに報告するブラウザアドオン/ツールバーがあります。それらは明示的にアクセスされたURLのみを報告する可能性がありますが、JSON URLについてもこれを危険にさらすことはありません。
クライアントにJSONデータのリクエストをPOST(GETではない)として送信させ、サーバーにJSONデータのGETリクエストを無視させる。
これにより、<script>が含まれなくなります。
While(1);を置くJSON応答の開始時に、JSONを解析する前にクライアントにそれを取り除きます。
私はこのアプローチの修正バージョンを提案します:最初に_</*
_を追加します。 while(1)
には2つの理由で問題があります。1つ目は、(クライアント、プロキシ、および検索エンジンで)マルウェアスキャナーをトリガーする可能性が高いことです。次に、WebサーファーのCPUに対するDoS攻撃に使用できます。これらの攻撃は明らかにサーバーから発生します。
Googleは " nparseable cruft "を使用して、この種の攻撃から身を守っています。この脆弱性は firefox 3で修正 でした。この脆弱性は、ブラウザがJSON仕様を実装する方法から発生します。
1)JSON応答に機密/非公開データが含まれている場合、要求が認証された場合にのみ応答を提供します(たとえば、認証されたセッションを示すCookieが付属しています)。 2)JSONデータに機密情報または非公開情報が含まれている場合は、推測不可能な秘密のURL(128ビットの暗号品質の乱数を含むURLなど)でホストし、この秘密のURLを許可されたユーザー/クライアントとのみ共有しますデータを参照してください。
(1)と(2)の両方を行う正当な理由はありません。
1つはABAC、2つ目はZBACです。複数のアクセス制御スキームを使用して多層防御を実現しようとすると、非常に複雑になります。
3)JSON応答の先頭に
while(1);
を置き、JSONを解析する前にクライアントにそれを取り除きます。4)クライアントにJSONデータのリクエストをPOST(GETではない)として送信させ、サーバーにJSONデータのGETリクエストを無視させる。
これらはすばらしいアイデアのように聞こえ、資格情報が悪用されないことを保証するのに役立つため、徹底した防御を追加します。
さらに、
5)SSLまたはその他の安全なチャネルを介して、機密データを含むJSONのみを提供します。
mITMを介したデータの漏洩を防ぐため。