遊びでやってみよう::記号禁止一歩手前でJavaScriptを書く
以下の断片が含まれるHTMLを吐き出すウェブアプリがあったとします。
<script type="text/javascript" >
$userdata
</script>
において、$userdataには以下のフィルターがかかっています。text/htmlでcharsetがiso-8859-1の世界で考えてください。
- 数字オッケー
- 英小文字オッケー
- 英大文字オッケー
- スペースオッケー
- 改行オッケー
- 等号(=)オッケー
- 上記以外は全部改行に変換される
- SGMLやiso-8859-1に不適合なら改行に変換される。たとえば[0x00]など
等号以外の記号は全部禁止です。かなり安全に見えますが、実は、以下のようなことが可能です。
document.URL(もしくはdocument.cookie)を読み出して悪意あるサイトにその内容を送りつける。
実際に、Firefoxの最新版で今朝、確認しました。ver 1.5.0.8のバージョンでも確認しました。(※)
コードは今回記しませんが、皆さんちょっと考えてみませんか?
注※昨夜、記号としてドット(.)も必要でしたが今朝方それを不要であると気がついたのです。ユーレカ!