Closed3

HTTPスローリクエスト攻撃

shmokmtshmokmt

よくunicornの場合はスローリクエスト攻撃を避けるために前段にNginxに置くという話が出てくるが、
スローリクエスト攻撃がどういう仕組みで成立するのかきちんと理解できていないと思ったので、メモ。

shmokmtshmokmt

スローリクエスト攻撃はHTTPヘッダーなどを遅く送ることで成立する。
例えば、HTTPのメッセージ形式で以下のような構造を取るが、ヘッダーを送ったあとに
空行を送らなければサーバー側ではHTTPメッセージが成立しないため、構文解析することができない。

HTTP-message
	= start-line
	  *( header-field CRLF )
	  CRLF
	  [ message-body ]

参考実装: https://github.com/gkbrk/slowloris
RFC: https://triple-underscore.github.io/RFC7230-ja.html#section-3

shmokmtshmokmt

このような場合にunicornのようなprefork型のモデルだとスローリクエストに1プロセス奪われてしまうが、
スロークライアントが直接通信するサーバーとして、NginxがあるとNginxがバッファリングしてくれるためリスクを下げてくれる。
現代では、クラウドサービスのALBとかが1番前にあると思うのでそれが肩代わりしてくれている認識。

参考: https://blog.willnet.in/entry/2015/02/24/155006

このスクラップは2023/09/03にクローズされました