web-dev-qa-db-ja.com

Webアプリ開発者はJSONハイジャックからどのように防御すべきですか?

JSONハイジャック に対する最善の防御は何ですか?

誰でも標準的な防御を列挙して、その長所と短所を説明できますか?ここに私が見てきたいくつかの防御策があります:

  1. JSON応答に機密/非公開データが含まれている場合、要求が認証された場合にのみ応答を提供します(たとえば、認証されたセッションを示すCookieが付属しています)。
  2. JSONデータに機密情報または非公開情報が含まれている場合は、推測不可能な秘密のURL(128ビットの暗号品質の乱数を含むURLなど)でホストし、この秘密のURLを、閲覧を許可されたユーザー/クライアントとのみ共有します。データ。
  3. JSON応答の先頭にwhile(1);を置き、JSONを解析する前にクライアントにそれを取り除いてもらいます。
  4. クライアントにJSONデータのリクエストをPOST(GETではない)として送信させ、サーバーにJSONデータのGETリクエストを無視させる。

これらはすべて安全ですか?これらのいずれかを他のものよりも選択する理由はありますか?他に見逃している防御策はありますか?

42
D.W.

最初の防御策は、有効な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攻撃に使用できます。これらの攻撃は明らかにサーバーから発生します。

28

Googleは " nparseable cruft "を使用して、この種の攻撃から身を守っています。この脆弱性は firefox 3で修正 でした。この脆弱性は、ブラウザがJSON仕様を実装する方法から発生します。

3
rook

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を介したデータの漏洩を防ぐため。

2
Mike Samuel