-2

Tomcat 8、Spring Security 4.x を使用しており、ユーザーの資格情報を認証する POST 経由で /login API を公開しています。/login API は一般的にセキュリティで保護されていないため、残念ながら、現在の実装では次の攻撃を行うことができます。

  1. ユーザー名とパスワードのフィールドに大量の入力を送信します。Spring セキュリティの UsernamePasswordAuthenticationFilter は、サーブレットからユーザー名とパスワードのパラメーターを文字列にコピーするだけです。大量のデータを送信し、メモリ不足による攻撃拒否を引き起こす可能性があります。サーブレット 3.1 仕様で readlistener を使用することは可能ですが、サーブレットを非同期にすることを避けることができれば、それが望ましいでしょう。では、単に content-size ヘッダーを見ることは可能ですか? /login の POST には、通常、ユーザー名パラメーター、その値 (上限サイズは制限されています)、パスワード パラメーター、およびその値 (ビジネス ルールによって制限されたサイズ) があります。したがって、理論的には、コンテンツ サイズ > 特定の構成可能なサイズを確認すると、認証を拒否できます。このアプローチに抜け穴はありますか?

  2. 攻撃者は content-size ヘッダーを大量に設定し、小さなデータのみを投稿できます。この場合、Tomcat はシミュレートされたブロッキングとして http 本文の読み取りをシミュレートするため、スレッドが長時間ブロックされる可能性があります。Tomcat が http 本文を読み込もうとしたときに、Tomcat でタイムアウトを指定する方法はありますか?

4

1 に答える 1

0
  1. リクエストの最大サイズを制限します。受け入れられる要求のヘッダーの合計 (<Connector>maxHttpHeaderSize属性) を制限したり、受け入れられる POST 本文の合計の長さ ( の属性) を制限したりでき<Connector>ますmaxPostSize

  2. この攻撃はスローロリスと呼ばれます。Tomcat の NIO が実際にスレッドを解放して、そのような攻撃から DOS を回避する「シミュレートされたブロック」。スローロリスの問題を軽減するために指定できるタイムアウトがあります。Tomcat コネクタのドキュメントをまだ読んでいないことは明らかなので、これは演習として残しておきます。

  3. /login「API」を「保護されていない」ままにしておくのはなぜですか? あの悪ガキを確保!

于 2014-11-07T03:28:48.307 に答える