CSRF攻撃の技術とその対策
ウェブサイトのセキュリティ問題は、プログラマーにとって非常に重要なものです。経験豊富なプログラマーは、自分のプロジェクトを守るために巧妙な方法で対策を取りますが、初心者にとっては非常に難しい問題です。ウェブサイトのセキュリティに関しては、言及すべきことがたくさんありますが、1つの記事ではすべてをカバーできません。ですので、私は「プログラマーのためのウェブサイトセキュリティ」というシリーズを作成することにし、その中でプログラマー向けのセキュリティ問題について説明します。
そして、最初の記事ではCSRF(Cross-site Request Forgery)攻撃の技術について紹介します。まず、この攻撃技術の概念から説明しましょう。
1. CSRF攻撃技術とは?
この質問に答えるために、私は自分の理解を基に説明します。つまり、私がどのように理解しているかをそのまま説明しますので、誤解があるかもしれませんが、あらかじめご了承いただき、より良い記事を作成するためにフィードバックをいただければ幸いです。
CSRF攻撃技術、または「クロスサイトリクエストフォージェリ」とも呼ばれる技術は、その攻撃対象を偽装するものです。ここでは、分かりやすい例を挙げて説明します。
例えば、システム内にユーザーを削除する処理があり、URLが次のようになっているとします:domain.com/delete.php?id=12
(IDが12のユーザーを削除)。このURLを知っている人がいた場合、その人はシステムの管理者を利用して攻撃を仕掛けることができます。その人は、管理者に対して画像タグ(IMG)を含むメールを送信し、各画像に異なるIDを埋め込んでおきます。もし管理者がそのメールを開き、そのシステムにログインしていた場合、管理者は意図せずに画像SRCに書かれたIDのユーザーを削除してしまうことになります。これはあくまで簡単な例ですが、実際には、こんなふうにIDをURLに埋め込むことはあり得ませんが、経験の浅いプログラマーがこれを見逃すことがあります。
他にもさまざまなケースがありますが、ここでその概念を理解していただけたかと思います。それでは、実際の対策方法について説明します。
2. CSRF攻撃の対策方法
通常、対策は2つの対象に分けて考えます。一つはプログラマー(coder)、もう一つはエンドユーザー(user)です。
エンドユーザー向けの対策:
- 不明な送信元のメールや、他の人とやりとりしているときには、システムへのログインを控えるようにしましょう。使用していないときは、すぐにログアウトします。
- 自分専用の端末を使用し、他の人がその端末にアクセスしないようにしましょう。
- パスワードは頻繁に変更し、予測しにくい強力なパスワードを設定しましょう。特に、特別な文字を使うことをお勧めします。現在、パスワードを破るソフトウェアが多く出回っています(CSRFには直接関係ありませんが、セキュリティのために記載しました)。
プログラマー向けの対策:
- 各端末やブラウザに対して、ランダムで自動生成されたトークンを作成し、その有効期限を設定します。
- データベースに影響を与えるリクエストにGETメソッドを使用しないようにしましょう。
- ユーザーからの入力を慎重に検証します。
- 管理者用のURLはできるだけ覚えにくく、複雑にしましょう。