Tomcat 8、Spring Security 4.x を使用しており、ユーザーの資格情報を認証する POST 経由で /login API を公開しています。/login API は一般的にセキュリティで保護されていないため、残念ながら、現在の実装では次の攻撃を行うことができます。
ユーザー名とパスワードのフィールドに大量の入力を送信します。Spring セキュリティの UsernamePasswordAuthenticationFilter は、サーブレットからユーザー名とパスワードのパラメーターを文字列にコピーするだけです。大量のデータを送信し、メモリ不足による攻撃拒否を引き起こす可能性があります。サーブレット 3.1 仕様で readlistener を使用することは可能ですが、サーブレットを非同期にすることを避けることができれば、それが望ましいでしょう。では、単に content-size ヘッダーを見ることは可能ですか? /login の POST には、通常、ユーザー名パラメーター、その値 (上限サイズは制限されています)、パスワード パラメーター、およびその値 (ビジネス ルールによって制限されたサイズ) があります。したがって、理論的には、コンテンツ サイズ > 特定の構成可能なサイズを確認すると、認証を拒否できます。このアプローチに抜け穴はありますか?
攻撃者は content-size ヘッダーを大量に設定し、小さなデータのみを投稿できます。この場合、Tomcat はシミュレートされたブロッキングとして http 本文の読み取りをシミュレートするため、スレッドが長時間ブロックされる可能性があります。Tomcat が http 本文を読み込もうとしたときに、Tomcat でタイムアウトを指定する方法はありますか?