Rack::MethodOverride
HTTP Methodをmiddlewareで上書きする
経路上のproxyなどで許可されていないmethodがある場合などに利用可能
リクエストボディに上書きしたいメソッド名を入れる
通常の設定
POSTからGET HEAD PUT POST DELETE OPTIONS PATCH LINK UNLINKのいずれかに上書きする
逆はできない
オリジナルのmethodはrack.methodoverride.original_methodから取得できる
PUT, DELETEなどを受け付けるエンドポイントへのアクセスは単純リクエストではないため、通常はCSRFできない Rack::MethodOverrideが利用されている場合は、POST経由でCSRF可能になる
code:log
❯ bundle exec puma
Puma starting in single mode...
* Puma version: 6.1.0 (ruby 3.2.1-p31) ("The Way Up")
* Min threads: 0
* Max threads: 5
* Environment: development
* PID: 91170
Use Ctrl-C to stop
=> cross originからREQUEST_METHODがDELETEになるリクエストを送信可能
PUT, DELETEであることをCSRF対策としていることはあまりない
大抵は別の機構により対策しているのでこれを入れていることが問題になるケースは稀