このGWT-RPCの質問(および回答#1)のフォローアップ。フィールドサイズのチェック、サーバーに送信される最大データサイズの事前逆シリアル化をチェックする正しい方法を知りたいです。たとえば、リクエストデータサイズ> Xの場合、リクエストを中止します。単純さを評価し、前述の質問/回答の回答に基づいて、全体的なリクエストの最大サイズをチェックするだけで十分であり、よりきめ細かいチェック(つまり、フィールドレベルのチェック)を逆シリアル化後まで延期できると思う傾向がありますが、私はベストプラクティスの提案。
関心のある技術スタック:Apache-TomcatフロントエンドWebサーバーとのGWT-RPCクライアントサーバー通信。
最初のステップは、リクエストのサイズをグローバルに制限することだと思います( httpd.confなどのLimitRequestBody?)。
RPCリクエストごとに設定できるような、よりきめ細かいチェックはありますか?もしそうなら、どこで、どのように?より細かい粒度のチェックは、1つのグローバル設定にどの程度のセキュリティ価値をもたらしますか?
例を使用して質問をより具体的に組み立てるために、同じサーブレットに次の2つのRPC要求署名があると仮定します。
public void rpc1(A a, B b) throws MyException;
public void rpc2(C c, D d) throws MyException;
次の最大サイズをおおよそ知っていると仮定します。
- a:10 kB
- b:40 kB
- c:1 M B
- d:1 kB
次に、次の最大サイズを期待します。
- rpc1:50 kB
- rpc2:1 MB
この例のコンテキストでは、私の質問は次のとおりです。
- リクエストの最大サイズをどこで/どのように設定するか-つまり、上記の例では1 MBですか?httpd.confのLimitRequestBodyだと思いますが、それがこの目的の唯一のパラメーターであるかどうかは100%わかりません。
- 可能であれば、サーブレットごとの最大サイズをどこで/どのように構成するか-つまり、サーブレット内のrpcの最大サイズは1 MBですか?
- 可能であれば、rpcリクエストごとの最大サイズをどこで/どのように構成/確認しますか?つまり、最大rpc1サイズは50 kB、最大rpc2サイズは1 MBですか?
- 可能であれば、rpc要求引数ごとの最大サイズを構成/チェックする場所/方法-つまり、aは10 kB、bは40 kB、cは1 MB、dは1kBです。ポストデシリアライズを行うのは実用的な意味があると思いますね。
- コスト/メリットに基づく実用的な目的では、一般的にどのレベルの逆シリアル化前チェックが推奨されますか?1.グローバル、2。サーブレット、3。rpc、4。オブジェクト引数?別の言い方をすれば、上記の逆シリアル化前の各レベルチェックのコストの複雑さと付加価値はどのくらいですか?
よろしくお願いします。