参照するセキュリティの問題はJSONハイジャックと呼ばれ、一部のブラウザにはリスクを軽減する機能が含まれていますが、他のブラウザでは依然として問題です。
幸いなことに、かなり単純な解決策があります。それを理解するには、そもそも攻撃がどのように機能するかを理解する必要があります。
サードパーティのサイトがXMLHTTPRequestを介してJSONファイルを要求し、通常の方法で解析することは実際には不可能です。これは、同一生成元ポリシーによって防止されるためです。
したがって、攻撃者が行うことは、JavaScriptでオブジェクトセッター関数を再定義して、新しいオブジェクトの値を自分のコードに返し、<script>
JSONファイルを参照する新しいタグを作成することです。JSONが読み込まれると、ブラウザはJSONを実行し、新しいオブジェクトを作成して、攻撃者のオブジェクトセッターハンドラーに値を返します。攻撃者はあなたのデータを手に入れました。
これを防ぐには、JSONコードをJavaScriptとして直接解析できないようにする必要があります。これが行われた場合、エラーをスローさせたいと思います。
これを実現する一般的な方法の1つ(GoogleやFacebookなどのサイトで使用)は、JSONファイルの先頭にコードを追加して無限ループを作成し、パーサーが残りのコードに到達しないようにする(JavaScriptエラーをスローする)ことです。 )。
たとえば、FacebookのJSON応答は文字列で始まりますが、Googleは、for(;;);
などのさまざまなコードを使用します(後者は、無限ループを作成するのではなく、単にエラーを直接スローします)。while(1);
throw(1); <don't be evil>
次に、JavaScriptを処理する独自のJSONを変更して、解析する前にこの断片を取り除く必要があります。たとえば、次のようにします。
function parseJSON(json) {
json = json.replace("for(;;);", "");
/* parse your JSON as usual */
}
これにより、スクリプトとJSONに少し手間がかかりますが、JSONハイジャックを防ぐのに効果的です。