HOME | LastUpdate: 2005-07-17
PHP と Web アプリケーションのセキュリティについてのメモのSession Fixation を起こす方法 に少しだけ追記しました。
wwwcheck.php で PHP 4.4.0 でリファレンス関連のエラーが表示される問題に対応しました。
本当にセッションハイジャック対策になるのかは分かりませんが、興味深いのでメモしておきます。
Chris Shiflett: PHP Security Forum で知ったのですが、Question about session hijacking の議論でWeb アプリケーションへのアクセス中に User Agent や Accept Charset などの HTTP ヘッダ文字列を変更するような人はほとんどいないという事を利用して、以下のような関数が挙げられていました(この関数はセッション管理クラスの中で使用されることを想定しているようですので、このままでは使えません)。
// get the fingerprint of the user function getFingerprint() { $fingerprint = $this->secret; if (array_key_exists('HTTP_USER_AGENT', $_SERVER)) { $fingerprint .= $_SERVER['HTTP_USER_AGENT']; } if (array_key_exists('HTTP_ACCEPT_CHARSET', $_SERVER)) { $fingerprint .= $_SERVER['HTTP_ACCEPT_CHARSET']; } $fingerprint .= session_id(); $fingerprint = md5($fingerprint); return $fingerprint; }
フィンガープリントを取っておいて、違う場合はログに書き込む、またはエラーメッセージを返すなどの対処を行うと、セッション ID を盗まれたとしても、盗んだ相手の User Agent や Accept Charset を同じにしなければ検出できますし、セッションハイジャックを防止できる可能性が高くなりますので、対策の一つとしては有効かもしれません。
Proxy を使用していると、IP アドレスが変更されたりすることは多いのですが、User Agent や Accept Charset をアクセス毎に変更するブラウザは多くはないと思います。うまく使えば有効な対策になるかもしれません。
少し前になりますが、PHP 開発者メーリングリスト(php.internals)で興味深い議論がありましたのでメモしておきます([PHP-DEV] PHP 5.1)。
以下のような ifsetor()
関数の実装例が提案されています。
function ifsetor( &$x, $default = NULL ) { if ( ! isset( $x ) ) { $x = $default; } return $x; } $a = ifsetor( $_GET['a'], '' ); $b = ifsetor( $_GET['b'], '' );
それまで知らなかったのですが、関数の引数をリファレンスにすると、未定義エラーは発生しないようです(PHP 4.2.2 以降で確認)。関数を呼び出す分、速度は少し遅くなりますが、以下のように書くよりはかなり読みやすいコードになると思います。2 回も同じ変数を書く必要がないというのは大きなメリットかもしれません。
$a = isset( $_GET['a'] ) ? $_GET['a'] : ''; $b = isset( $_GET['b'] ) ? $_GET['b'] : '';
Path Disclosure and PHP - iBlog - Ilia Alshanetsky によると、本来、script.php?name=foo
のように入力変数の受け取りを期待しているスクリプトで、script.php?name[]=foo
のような形で入力変数を受け取ると、スクリプトによってはエラーが発生し、ディレクトリパスが表示されてしまうという問題があるそうです。
対策として、以下のようにエラーをブラウザに表示しないように設定し、別でファイルにログを記録する方法と、受け取り時にキャストを使用して型を強制してしまうという方法が挙げられています。
<?php ini_set(“display_errors”, 0); ini_set(“log_errors”, 1); ini_set(“error_log”, “/path/to/php/errors”); ?>
PHP 4.4.0 と PHP 5.1 beta3 が公開されています。
PHP 4.4.0 では、バグ修正のみですが、リファレンスによるメモリ破壊のバグが修正されています。リファレンス関連でエラーが発生する可能性がありますので、バージョンアップの際にはテストを行っておいた方が安全です。
また、mb_mime_encoding()
関数に問題があり、mb_send_mail()
などで日本語の件名が文字化けする可能性がある問題が報告されていますので、注意してください([PHP-users 26184] PHP4.4.0でメールを送信すると、題名が文字化けします。)。
XML_RPC がまたバージョンアップしています。parseResponse()
が呼ばれる毎にメモリリークを起こす問題が修正されているようです。
セキュリティ関係のデジタルマガジン。26 ページから Advanced PHP security - vulnerability containment という記事があります。
GTK+ を使用するメールクライアント、ニュースリーダ。
Mozilla 系のブラウザとメールクライアント。日本語版などのローカライズ版は拡張モジュールなどの不具合により、1.0.6 が公開されるまで延期されるそうです。セキュリティ問題の修正が行われています。
少し古いものが多いですが、忘れてしまいそうなものが増えてきましたので、忘れない間にメモだけでも残しておきます。
PEAR などの XMLRPC の実装で、PHP コードの実行を許してしまうセキュリティ問題が発見されています。XMLRPC を使用している PHP スクリプトで影響を受けますので、最新版にアップデートしてください。
PEAR であれば、pear upgrade XML_RPC
を実行すれば最新版にアップデートされます。
XML-RPC for PHP Remote Code Injection Vulnerability (SecurityFous) でこの問題の影響を受ける製品一覧がまとめられています。確認しておくと良いと思います。
PHP Security Consortium: SecurityFocus Summaries によると、XMLRPC のセキュリティ問題の影響を受ける主な製品とバージョンが以下のようにまとめられています。
- Serendipity 0.8.2
- PEAR XML_RPC 1.3.1 (and 1.3.2 fixes additional vulnerabilities)
- XML-RPC for PHP 1.1.1
- Drupal 4.6.2 or 4.5.4
- Xoops 2.0.12a
- phpMyFAQ 1.4.9 or 1.5.0 RC5
- WordPress 1.5.1.3
- Nucleus CMS 3.21
- phpAdsNew 2.0.5
- phpPgAds 2.0.5
引用: SecurityFocus Summaries: Alerts from SecurityFocus Newsletter #306
その他のリンク
PHP Security Consortium で、PHP に関連したセキュリティ問題のみを取り上げたSecurityFocus Summaries が開始されています。PHP 自体のセキュリティ問題、PHP を使用した製品の他、Mozilla などのブラウザや Apache などの関連性のあるセキュリティ問題が取り上げられています。PHP 関連のセキュリティ問題を確認するのに非常に便利です。
PHP 4.4.0RC2 と PHP 5.1.beta2 が公開されています。PHP 4.4.0 では、致命的なリファレンスのに関するバグ(Bug #29423: reference count gets wrong when return-reference-calling a normal function,Bug #32685: Segfault when using assignment by reference within function)が修正されています。この変更に伴い、PHP 4.3.x とはバイナリレベルので互換性が取れない可能性があるそうです。
詳しくは、PHP 5.1 beta2 の NEWS と、PHP 4.4.0RC2 の NEWS を参照してください。
登録が必要です。
CLI 版 PHP で対話モードを実現する PHP スクリプト。PHP 4.3.0 以上とコンパイル時に readline が組み込まれているか、拡張モジュールとして読み込む必要があります。便利です。
PHP のセキュリティ強化のための Patch 集。現在は PHP 5.0.4, PHP 4.4.0RC2, PHP 4.3.11 に対する Patch が公開されています。また、マニュアルも作成されたようです。
Hardened PHP の作者による PHP と Session Fixation についての解説と考察。
Rast: 全文検索システム の機能を PHP から呼び出すための PHP 拡張モジュール。
Windows 2000 SP4 用の更新プログラム ロールアップ 1 を適用した時に不具合が起きることがあるようです。
バージョン 1.8.2 以前の ruby に含まれる XMLRPC サーバにも、リモートの攻撃者に任意のコマンド実行を許してしまう問題があります。
CD のみで起動する Linux ディストリビューション。
ネットワーク負荷の監視、グラフ化ツール。
ファイル転送ツール。Rsync 2.6.5 以前でデーモンモードでアップロードを許可しており、--compress
オプションを拒否していない場合に zlib の Buffer Overflow の影響を受ける問題が修正されています。
GTK+ を使用するメールクライアント、ニュースリーダ。
2005年 7月17日分を追加。
このページを作成。2005年 7月10日分を追加。
LastUpdate: 2005-07-17 | HOME