メッセージ欄
2007年7月の日記
▼ [セキュリティ] Firefox 2.0.0.5のパスワードマネージャにセキュリティ脆弱性
元ネタ: Holes in Firefox password manager (via Open Tech Press: Firefox 2.0.0.5にパスワードが盗まれる脆弱性)
Firefox 2.0.0.5でパスワードマネージャのセキュリティホールが修正されたが、危険性が残ったままであり、パスワードが盗み取られる可能性があるとのこと。
Firefoxには (ユーザが許可すれば) 一度入力されたパスワードは次回訪問時に自動的に入力されるが、これが同一ページ以外でも同一のサーバ上に同様のフォームがあれば機能してしまう。
ある会員制のサイトに利用者がそのサーバ上にウェブページを作成する機能を持つ場合、攻撃者は偽のフォームを設置することができる。この偽フォームの送信先に関わらず、そのページにサイトの会員がアクセスした時点で自動的に (IDと) パスワードが入力された状態になる。あとはJavaScriptでフォームの情報にアクセスすることでパスワード等を得られる。
JavaScriptを利用しない場合でも、CSS で
input {
display: none;
}
とした上で、<input type="submit" value="さくらたんのエロ画像を表示"/> とするだけで引っかかってくれそうな予感。もしくは、画面いっぱいの Submit ボタンを設置するとか。
▼ [Perl] Perl 5.9.5変更点 (の一部)
Perl v5.9.4 - v5.9.5間の変更点で気になったところをメモ。(元ネタはv5.9.5のperldelta) v5.9.x は開発版のため、安定版で利用できるまではしばらくかかる。(v5.10 で実装?)
非互換
- 汚染とprintf
- Taint mode (汚染チェックモード) で動作する場合、printf/sprintfの書式指定文字列に汚染されたデータはNG。
- undefとシグナルハンドラ
- "
undef $SIG{FOO}", "delete $SIG{FOO}"は "DEFAULT" の代入と等価になった。 - 仮想ハッシュは取り除かれた
- 仮想ハッシュ (pseudo hash) って何だ? と思ったら配列をハッシュっぽくアクセスする機構らしい。いらないな。
- バイトコードコンパイラと perlcc は削除
- 信頼性と人的資源の問題らしい。
正規表現
- 再帰的なパタン
- "
(??{})" 構文を使用せず、再帰的なパタンを記述可能になる。後方参照して使えるので嬉しい。入れ子になった対応する山括弧にマッチさせるには下記の通り:/ ^ # 行の開始 ( # 取込領域1の開始 < # 開き山括弧にマッチ (?: # 以下のいずれかにマッチ: (?> # このグループ内でバックトラックを発生させない [^<>]+ # 山括弧以外の文字が1文字以上 ) # 無バックトラックグループの終了 | # ... または ... (?1) # 取込領域1の呼び出して再実行 )* # 0回以上。 > # 閉じ山括弧にマッチ ) # 取込領域1の終了 $ # 行の終了 /xPCREの実装とは少々異なるので注意とのこと。 - 名前付きの取込領域
- $1 のように数字でアクセスする時代は終わった。
(?<name>regex)でマッチさせた部分は\k<name>または$+{name}で参照することは出来る。例:s/(?<letter>.)\k<letter>/$+{letter}/g同一の取込領域名を複数個所に付けた場合、%+ の代わりに %- を利用する。これは値として配列へのリファレンスをもち、その配列にはマッチした文字列がそれぞれ含まれている。
▼ [Windows] MSIME補完用辞書
標準のMSIME辞書では "支那" や "日本海" などを変換することが出来ない。(後者は "日本" + "海" で候補が出る。) これらの単語が変換できず、困る場合には自主規制語補完辞書を利用して登録すれば良い。
- 言語バーから "ツール" → "辞書ツール" を起動。
- "ツール(T)" → "テキストファイルからの登録(T)..." を選択。
- ダウンロードしたファイルを選択。
▼ [WWW] favicon.icoの作成
ウェブサイトにアイコンを関連付ける機能は、元々 Internet Explorer に実装されていたものだが、今では多くのブラウザが対応している。
アイコンファイルの作成
Windows Iconファイルを作成するソフトが数多くあるが、ここでは手軽に使える toico を紹介する。インストールは難しいこと無いので普通に。標準的な make(1) には対応しないため、GNU make を利用する必要がある。
% wget http://wizard.ae.krakow.pl/~jb/toico/toico-0.18.tar.gz % tar xvfz toico-0.18.tar.gz % cd toico-0.18 % gmake # gmake install
アイコンサイズは、ブラウザ用 (16x16)、デスクトップ用 (32x32) などがあるが、環境によっては 48x48, 64x64, 128x128 が利用されることもあるので、余裕があればそれらのサイズでも作成しておくと良いだろう。(ただし、128x128 は滅多に使われず、サイズも大きくなりすぎるため、64x64 までが現実的である。)
icon-16x16.png, icon-32x32.png, icon-48x48.png から favicon.ico を作成するには以下の通り実行すればよい。
% toico -o favicon.ico icon-16x16.png icon-32x32.png icon-48x48.png
FreeBSDには graphics/png2ico があったようだ。
アイコンファイルの指定
この機能により、Windows Icon ファイルを /favicon.ico (ウェブサイトの最上位ディレクトリ) でアクセスされる位置に配置するか、HTMLファイル中に以下の指定を行うことでURL欄やブックマークに表示することができる。混乱を避けるため、ファイルは常に /favicon.ico として、link による指定も同時に行うのが良いだろう。
<link rel="shortcut icon" href="/favicon.ico">
▼ [Apache] 画像への直接リンクを防ぐ
画像等を外部から直接参照させる形で利用されることを防止する方法。Apache 1.3 + mod_rewrite を利用する。
自サイトが http://www.example.com/ で、それ以外からの直接リンクを避けるには httpd.conf に以下の設定を行う。この設定では、代替画像として http://www.example.jp/tmp/eroero.gif へリダイレクト ("R"; redirect) される。また、"NC" (no case) が指定されているため、大文字と小文字を区別しない。
RewriteEngine on
RewriteLog /var/log/httpd/rewrite.log
RewriteLogLevel 9
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www\.example\.jp/ [NC]
RewriteCond %{REQUEST_URI} !^/tmp/eroero\.gif$
RewriteRule \.(jpg|png|gif)$ http://www.example.jp/tmp/eroero.gif [R,NC]
HTTPで通常アクセスされない領域に代替画像を置き、リダイレクトを行うことなくその画像そのものを返す方法もある。(RewriteCondの記載は省略しているが必要。)
RewriteRule \.(jpg|png|gif)$ /www/tmp/eroero.gif [NC]
また、特定のサイト (http://www.example.com/, http://www.example.net/) からを排除するのみで事足りる場合には、HTTP_REFERER に関する条件を下記のように設定する。なお、いずれかに該当すればよいため、"OR" (logical or) の指定を行っている。
RewriteCond %{HTTP_REFERER} ^http://www\.example\.com/ [OR,NC]
RewriteCond %{HTTP_REFERER} ^http://www\.example\.net/ [NC]
問題点
この方法で制限を行った場合、img による指定や、背景画像として利用されることは防止できるが、通常のリンク (a; アンカータグ) によって参照する場合にも代替画像にリダイレクト (または置換) されてしまう。これを避ける方法は無い。
また、不正に参照しているサイトへのアクセス後、正規のサイト (http://www.example.jp/) へアクセスした場合、正規のサイトから参照されているにも関わらず、(ブラウザのキャッシュにより) 代替画像が表示される可能性がある。このような事象を避けるには、"Expires: 過去の日付", "Pragma: no-cache", "Cache-Control: no-cache" などを出力することで対応できる。これは、send-as-is ハンドラやCGIプログラムを利用することで出力することが出来る。以下、send-as-is ハンドラを利用する場合の設定について記載する。
- Apacheのhttpd.confに以下の指定をする。(RewriteCondの記載は省略しているが必要。)
AddHandler send-as-is asis ... RewriteRule \.(jpg|png|gif)$ /www/tmp/eroero.gif.asis [NC,L]
- ヘッダ付きの画像を作成する。
% cd /www/tmp % (cat; cat eroero.gif) > eroero.gif.asis Status: 200 OK Content-Type: image/gif Expires: Thu, 01 Jan 1970 00:00:00 GMT Pragma: no-cache Cache-Control: no-cache ← 空行 ^D ← CTRL+D
- Apacheを再起動する。
# /usr/local/etc/rc.d/apache.sh restart
-
▼
画像への直接リンクを防ぐ (補足)
Magical Diary, beta version 画像への直接リンクを防ぐ (2007/07/23)の補足。RFC 2616で Referer: は以下の通り定義されており、絶対URIの他、相対URIを含めることも許されている。Referer = "Referer" ":&q...
