1

したがって、JSON リンクからデータを取得し、そのデータに基づいてドロップダウンを設定するメイン ページがあります。私の質問は、現在、json が出力される URL に誰でもアクセスできるため、サーバーとサーバー上で実行されているページのみが JSON 出力にアクセスできるように保護したいということです。

remote_addr や server_addr などの PHP サーバー変数を比較することを考えていましたが、remote_addr はクライアント IP であり、サーバーではありません。

これを行うための良い方法は何ですか?

ありがとう

4

1 に答える 1

1

参照するセキュリティの問題は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ハイジャックを防ぐのに効果的です。

于 2013-02-12T02:07:43.780 に答える