ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
Webアプリケーションにおける脆弱性の一つ。クロスサイトリクエストフォージェリ。
ある悪意ある仕掛けの施されたサイトのWebページを閲覧したときに、閲覧者の予期せぬ別サイトのスクリプト等が実行されてしまう問題である。
具体的な方法は書かないが、ある程度スキルがある者なら、外部のCGIを実行させる方法は幾つか予想が付くだろう。
その機能を悪用し、例えばどこかの掲示板に投稿させたり、何らかのサービスにユーザー登録させたり、といった事がある。
投稿では、mixiの日記に強制的に投稿する「ぼくはまちちゃん!」問題などが知られる。
また最近ではmixiの自分のページをURLにすることで、アクセスログ取得のような使い方もなされているようだ。mixiの場合、本名を登録しているケースも少なくないため、問題は深刻と思われる。
ユーザーがこの攻撃から身を守るのはほぼ不可能であるが、サービス提供者はこの攻撃を回避するよう、CGIプログラムを作成することができる。よって、こういったサービス(mixiなど)を提供する際には、この攻撃を受けないよう、対策を取るべきだと考えられる。
mixiのように、ログインを前提としたサービスであれば、セッション管理用に乱数が使われることが多いが、これを上手に活用することで、ほぼ、CSRFを防ぐことが可能である。
以下は、サービス提供側の対策方法を述べる。
このセッションIDは、発行以降ログアウトするか一定の寿命を迎えるまで、サービスを利用するパスワードとなる。
このセッションIDは、必ずログインしてから作成し、発行する必要がある。さもないと、セッション固定攻撃の対象となる。
「確認画面」を作れば防げる、などとする対策案を提示する者がいるが、無駄である。攻撃者は、その次の実行画面に直接攻撃を加えるからである。
そこで、機能は次の3画面で構成することにする。
述べる迄もないが、CGIが動くのは、1と2の間、2と3の間である。
通常の攻撃スタイルは、いわゆる1パスであり、あるタイミングでCGIに直接データを送ることで実現する。
従って上述の例であれば、攻撃者は2→3の段階のCGIを、ターゲットとするだろう。セキュリティ強化は、この段階を重点的に行なうこととする。
そこで、最後の2→3の段階で、その投稿が本当に本人からの要求であるかを確認する。
具体的には、画面2ではセッションIDをinput要素にhiddenで含め、処理系はこのセッションIDと、Cookieから与えられるセッションIDが一致するかを確認する。異なる場合は、投稿を受け付けないようにする。
この方法だけで、CSRFはかなり防げる。
但し、1→2を実行してセッションIDを得たあと、更に2→3を実行するような、2パスの攻撃は避けられない。
こういった悪質極まるセッションハイジャックには対応するのは、かなり難しいと思われる。それと同時に、これを全自動で行なう処理を作るのもまた、かなり難しいと思われる。
そこで完全な対応ではないが、攻撃側実装を困難にするため、少なくとも画面1にはセッションIDは含めないようにする。
セッションIDを得るためには少なくとも画面2を得ねばならないとすると、画面1→2の間のCGIで、状況に応じた何らかの対応をすることも可能となるだろう。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます