Closed3
HTTPスローリクエスト攻撃
よくunicornの場合はスローリクエスト攻撃を避けるために前段にNginxに置くという話が出てくるが、
スローリクエスト攻撃がどういう仕組みで成立するのかきちんと理解できていないと思ったので、メモ。
スローリクエスト攻撃は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
このような場合にunicornのようなprefork型のモデルだとスローリクエストに1プロセス奪われてしまうが、
スロークライアントが直接通信するサーバーとして、NginxがあるとNginxがバッファリングしてくれるためリスクを下げてくれる。
現代では、クラウドサービスのALBとかが1番前にあると思うのでそれが肩代わりしてくれている認識。
このスクラップは2023/09/03にクローズされました