JSONPエスカレーションの脆弱性を防ぐために、すべてのJSON応答の前に ")]}'、\n"のような一連の引用符を付けたいと思います。
play2フレームワークでどのように行うことができますか?ボディパーサーをJSONに設定し、すべての応答に手動でプレフィックスを付けましたが、ネイティブフレームワーク機能を介してこのジョブを実行するためのより洗練された方法を探しています。
JSONPエスカレーションの脆弱性を防ぐために、すべてのJSON応答の前に ")]}'、\n"のような一連の引用符を付けたいと思います。
play2フレームワークでどのように行うことができますか?ボディパーサーをJSONに設定し、すべての応答に手動でプレフィックスを付けましたが、ネイティブフレームワーク機能を介してこのジョブを実行するためのより洗練された方法を探しています。
「JSONPエスカレーションの脆弱性」とはどういう意味ですか?(グーグルで検索すると、この質問が最初の結果として返され、他にはほとんど何も返されません)。
他の人があなたのJSONをJSONPとして使用するのを防ぎたいですか?次に、 JSONPパディングを含めないでください。
同一生成元ポリシーの問題がない他のプログラムで、ブラウザの外部でJSONを使用したり、独自のサーバーでプロキシして独自のドメインのクライアントにサービスを提供したりすることを防止したいですか?それなら不可能です。不自由なJSONを提供しても、とにかくそれを理解します。あなたができる唯一のことは、これを禁止する契約条件を書いて、それらを訴えることです(それで頑張ってください)。
この場合の理想的な方法は、カスタムの暗黙的なplay.api.http.Writableに解決することだと思います。これを行うには、コントローラーが拡張するトレイトに暗黙の定義を追加します。
import play.api.http.Writeable
trait SecuredJsonController {
implicit def writeableOf_JsValue(implicit codec: Codec): Writeable[JsValue] = {
Writeable(jsval => codec.encode(")]}',\n" + jsval.toString))
}
}
これは私にとってはうまくいきます。Zedへの返信で何を意味するのかはわかりませんが、最初に要求したとおりに応答本文をパディングして、JSONの脆弱性エクスプロイトをクラッシュさせることは非常に一般的です。Googleは「while(1);」でそれを行います。および「for(;;);」を含むFacebook だからそれは良い安全策です。このような脆弱性の詳細については、こちらをご覧ください。