開発日記
気づいた部分からじわじわと。
- BugTrack/581 - (au/TU-KA) EZweb からのアクセス (完了)
- cvs:pukiwiki.ini.php (v1.4:1.58, 1.59)
- EZweb端末が使用している組み込み機器用Webブラウザからのアクセスを、imode携帯であると(※PCではないと)みなすことで、ゲートウェイなしでもPukiWikiにアクセスできる状態にします。
- 同じブラウザを搭載している(同じ User Agent 文字列「UP.Browser」を含んでいる)WAP携帯などにも同様の効果があると思われます。
- まずはコミットしました。EZwebから本当に使えるかどうか、このUser agent文字列は適切なのかどうか(EZweb端末以外のデバイスを巻き込まないのか、あるいは、これで本当に全てをカバーするのか)等、チェックして行く必要があります。
- 良い/悪い の区別なく、反応をお待ちしております :) 上記BugTrackまでどうぞ。
- cvs:init.php (v1.4:1.81) More defensive. Added defines and unsets
- クライアント側から渡される文字列やサーバー側の文字列をある程度徹底的に排除、あるいはアクセス不能、あるいは書き換え不能にします。
- Added defines SERVER_PORT, SERVER_SOFTWARE
- Removed unused define PHP_SELF
- Unset already-defined variables from memory
- Unset USER AGENT related, after user-agent handling
- Unset GET / POST related more
- Unset QUERY_STRING related except $_SERVER['REQUEST_URI']
- func.php が $_SERVER['REQUEST_URI'] を使っているため、うまい方法が出るまで現状を維持します
- Prohibit $_GET['msg'] attack
- $vars を使うことの懸念の一つは、悪戯しやすいGETメソッドの扱いです。これはその対策の一つとして、GETメソッドを用いたPukiWikiへの書き込み行為を(ある程度)明確に禁じます。具体的には、データ入力に $vars['msg'] を用いている全ての機能(editコマンドや多くの書き込み型プラグイン)に対して、(デフォルトのPOSTメソッドではなく)GETメソッドでアクセスしようという試みを Runtime Error でかわします。逆に言えば、書き込み型プラグインに積極的に $vars['msg'] を用いることでGETメソッドによる攻撃を封じることができます。
- Prefer POST to GET when creating $vars
- 同。仮にGETがPOSTと同じキーを持っていた場合でも、POSTの内容を優先させる様に記述することで心の平安を保ちます。
- cvs:func.php (v1.4:1.65)
- cvs:plugin/server.inc.php (v1.4:1.3)
- Using defined variables. See init.php (v1.81) for detail
- cvs:init.php (v1.4:1.82) Don't init $user_agent here
- うっかり空の配列に初期化して(= デフォルト値を消して)しまいました。さあ携帯電話からしかアクセスできないWikiの誕生です :) ・・・初期化しすぎ XD
- うっかり初期値を間違えたり、消してしまった方向けのメッセージを追加しておきました。
- cvs:init.php (v1.4:1.83-1.85)
- diff: cvs-raw:init.php.diff?r1=1.82&r2=1.85
プラグインや内部動作向けに define 'UA_TYPE' を追加しました。PukiWikiがユーザーエージェントをどう判別したか(defaultかそれ以外, jphone, i_mode等)が入ります。 再検討しました
プラグインや内部動作向けに define 'UA_NAME' および 'UA_MATCHES' を追加しました。UA_NAME には PukiWikiがユーザーエージェントをどう判別したか(例: default, jphone, i_mode)が、'UA_MATCHES' には、ユーザーエージェントを識別した時の決め手となった文字列(user-agent文字列の一部で、ブラウザ名とバージョン)が入ります。 さらに大規模に書き直します XD
- いずれも、ユーザーエージェントごとに大雑把にスタイルをカスタマイズしたい時に便利ではないかと思います。カスタマイズ用途向けです。
- UA_MATCHES の方は、今はどこにも使われていませんが、安全(XSS)を考えると事前に何らかのフィルタを通した方が良いですよね。ちょっと考え中です。(その結果、下のVodafoneに続く)
- Vodafone(JPHONE)向けの設定で間接的にまずい点がある様でしたので、修正しておきました。動作的な変更はないはずです。
- cvs:pukiwiki.ini.php (v1.4:1.60)
- (1) ユーザーエージェントを識別するための検索パターンは「ブラウザ(デバイス)の種類」と「ブラウザのバージョン」だけに絞るべきですが、Vodafoneに関してだけ、greedy(関係ない部分まで強引)に文字列をマッチさせるパターンが設定されていました。これを他と同様になる様に修正しました。
- (2) 今までの表記では、その意図はともかく、マッチした文字列の中に端末シリアル番号まで含まれてしまう可能性があるため、他の脆弱性がもしあった場合に個人情報が漏洩する可能性があると思われました。
- cvs:jphone.ini.php (v1.4:1.7)
- (3) 一方で、greedyな検索パターンを用いている理由は、ユーザーエージェント文字列をこのファイルの中でより細かく調査するためでした。しかし、検索パターンを別のファイルに記載していたため、その意図が読み取り辛い状態になっていました。
- (4) そこで、こちらのファイルで別途必要な検索を行うことで、従来通りに機能する様に調整しました。このときに用いるユーザーエージェント文字列は、このファイルの処理が終わった後に(init.php)すぐに破棄されるため、デフォルトの状態ではメモリに残ることはありません。
- vodafone 技術資料: ユーザーエージェントについて
Last-modified: 2004-07-04 (日) 16:36:35