はじめに
この記事はWebの基礎をおさらいカレンダー Advent Calendar 2022です。
このカレンダーでは、なんとなくわかった気になっている、Webの知識をおさらいするカレンダーです。
興味をもし持ってくださった方は、購読いただけると嬉しいです!
CSRF(Cross Site Request Forgeries)とは
CSRFとはWebアプリケーションの脆弱性を使ったセキュリティ攻撃の一種を指し、
日本語に直すと、サイトを横断したリクエストの偽装ということになります。
具体的な状況で言うと、
掲示板やメールなどに記載された悪意のあるURLを開いた際に、
ユーザーの意図しないリクエストを標的となるWebサービスに送信してしまう攻撃です。
別のサイトなどから、攻撃対象のサイトに対して、横断的に偽装したリクエストを飛ばしているからCSRFというわけです。
また、よく聞くセキュリティ攻撃にXSSというのがあり、そちらと混同する方もいるかと思いますが、
XSSはユーザーのブラウザで不正な操作が行われるのに対し、CSRFはWebサーバー側で不正な操作が行われるというのを意識しておきましょう。
被害
具体的に発生する被害は以下のような例です。
- 掲示板やSNSでの不正な書き込み
- 商品の不正購入
- 金融サービスでの不正な送金
なぜ、このような被害が起きるのかというと、Webサーバー側で、不特定多数の外部からのリクエストを許可してしまっているからです。
例えば、ログインして投稿するような掲示板では、
識別されたユーザーが文字列を入力して投稿ボタンを押すことで初めて投稿がされるため、
他の人が自分のアカウントで投稿するには、ログイン情報を知る以外に方法がないように思えます。
しかし、この投稿ボタンを押したときのリクエストを、別のサイトから行うようにして、偽装リクエストを送ることで、
その人のアカウントから投稿されたように見せることができます。
過去、CSRFによる誤認逮捕などもあったため、不審なリンクは踏まないようにしましょう。
## 対策
別のサイトからのリクエストを行えないようにすることが対策となります。
- CSRFトークンを利用する
- 外部サイトには特定できない、ワンタイムトークンを使用する
- ワンタイムトークンを発行しセッションに格納する
- フォーム送信ページにhiddenで発行したトークンを埋め込む。
- 送信されたトークンとセッションに格納されたトークンが一致するかを確認する
- 外部サイトには特定できない、ワンタイムトークンを使用する
- リファラーまたはオリジンを確認する
- どこのサイトからリクエストが来たのかを識別し、外部サイトであれば遮断する。
- セッション用CookieにSameSite属性を使用する
- SameSite属性を使用しておけば、Cookieに保存されているセッション情報は同じサイト内でしか使えなくなります。
まとめ
以上、CSRFについての説明でした。
セキュリティに対しての知見を正しく理解して、正しい対策を行えるようにしていきましょう!
Webの基礎をおさらいカレンダー Advent Calendar 2022でした。
興味をもし持ってくださった方は、購読いただけると嬉しいです!
参考文献
IPA 安全なウェブサイトの作り方 - 1.6 CSRF(クロスサイト・リクエスト・フォージェリ)
これで完璧!今さら振り返る CSRF 対策と同一オリジンポリシーの基礎