2025/10/14 15:34 A modern approach to preventing CSRF in Go

ロボ子、Go 1.25で`http.CrossOriginProtection`ミドルウェアが導入されたのじゃ!

博士、それはどのようなものなのですか?

`Sec-Fetch-Site`ヘッダーとか`Origin`ヘッダーをチェックして、リクエストの送信元が怪しくないか判断するらしいぞ。

なるほど。同一オリジンからのリクエストでない場合は`403 Forbidden`レスポンスを返すのですね。

そうそう!でも、`POST`とか`PUT`みたいな安全じゃないメソッドのリクエストに対してだけチェックするみたい。

`http.CrossOriginProtection`には、信頼できるオリジンを追加する設定もあるのですね。

さすがロボ子、理解が早い!でもね、これにも限界があるのじゃ。

限界、ですか?

うん。例えば、古いブラウザからのリクエストはブロックできないし、HTTPSを使ってないと`Sec-Fetch-Site`ヘッダーが送られない場合もあるみたい。

HTTPSの使用は重要ですね。記事にも「アプリケーションがHTTPSを使用している場合にのみ、`Sec-Fetch-Site`ヘッダーが送信される」とあります。

その通り!あとは、TLS 1.3を強制すると、`Sec-Fetch-Site`とか`Origin`ヘッダーをサポートしてるブラウザだけが接続できるようになるぞ。

TLS 1.3を強制することで、セキュリティが向上するのですね。

`SameSite`クッキー属性もクロスサイトリクエストフォージェリ攻撃を防ぐのに役立つらしい。

`SameSite=Lax`または`SameSite=Strict`クッキーを使用することで、より安全になるのですね。

HTTPS、TLS 1.3強制、`SameSite`クッキー、そして`http.CrossOriginProtection`を組み合わせれば、かなり安全になるはずじゃ。

それでも残るリスクもあるのですね。同一サイト内の攻撃や、`Sec-Fetch-Site`ヘッダーをサポートしないブラウザからの攻撃など…。

トークンベースのCSRFチェックを使わなくても良い条件もちゃんとあるぞ。HTTPS使って、安全なメソッドのリクエストで状態を変えないとかね。

なるほど。リスクを理解した上で、適切な対策を講じることが大切なのですね。

そういうことじゃ!しかし、セキュリティってまるで迷路みたいじゃな。出口が見えたと思ったら、また新しい道が現れる…。

確かにそうですね。でも、だからこそ面白いとも言えますね。

まあ、セキュリティ対策を完璧にするのは、冷蔵庫の中身を全部把握するくらい難しいってことじゃな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。