1

for(;;);クロスドメインJSONPリクエストのレスポンス本文でを無視する方法がわからないようです。私は自分のサーバーでこれを行っていますが、ここでは他に何も起こっていません。私はそれをfor(;;);コールバックの応答本文の中にそのように含めようとしています:

_callbacks_.callback(for(;;);[jsondata....]);

しかし、JSコードが解析される前に、応答本文からそれを削除するにはどうすればよいですか?私はGoogleClosureLibraryを使用しています。

4

1 に答える 1

1

わかりました、私はそれを理解したと思います。for(;;);の理由 特定の情報のクロスドメインデータ要求を防ぐためにあります。したがって、基本的に、保護しようとしている情報がある場合は、通常のAjax JSONチャネルを経由し、複数のサーバーにデータを保存している場合は、サーバーレベルで処理します。

JSONPリクエストは実際にはリモートスクリプトインクルードです。つまり、サーバーが出力するものはすべて実際のJavascriptコードであるため、for(;;);beforeがある場合は_callbacks_.callback();、リクエストが成功するとコードがオリジンドメインで実行されます。無限ループの場合は、明らかにページが詰まります。

したがって、通常の実装方法は次のとおりです。

  1. 同じサーバー上にあるファイルに通常のAjaxリクエストを送信します。
  2. サーバーレベルのものを実行し、暗号化されたCURLを介して外部サーバーにリクエストを送信します。
  3. サーバーの応答にセキュリティを追加します(afor(;;);またはwhile(1);orthrow(1);の後に文字列が続き<prevent eval statements>ます。
  4. 応答をテキスト文字列として取得します。
  5. 文字列からセキュリティ実装を削除します。文字列(現在は「JSON文字列」)を、標準のJSONパーサーを使用してJSオブジェクト/配列などに変換します。
  6. データを使ってやりたいことは何でもしてください。

私はグーグルで適切な情報を見つけられなかったので、誰かが将来グーグルする場合に備えて、これをここに出すべきだと思った。これは、クロスドメインリクエストフォージェリを防ぐのに役立ちます。

于 2012-09-26T21:04:15.273 に答える