カテゴリー: Computer

PHP 5.1.2の脆弱性

A cross-site scripting (XSS) vulnerability in phpinfo (info.c) in PHP
<= 5.1.2 allows remote attackers to inject arbitrary web script or HTML
via long array variables, including (1) a large number of dimensions
or (2) long values, which prevents HTML tags from being removed.
(CVE-2006-0996)

Directory traversal vulnerability in file.c in PHP <= 5.1.2 allows
local users to bypass open_basedir restrictions and allows remote
attackers to create files in arbitrary directories via the tempnam
function. (CVE-2006-1494)

The copy function in file.c in PHP <= 5.1.2 allows local users to
bypass safe mode and read arbitrary files via a source argument
containing a compress.zlib:// URI. (CVE-2006-1608)

Mandriva Linux Security Advisoryによると現行リリースのPHP 5.1.2,4.4.2にも含まれる脆弱性を修正したPHPパッケージをリリースしましたね。重要な修正ではないので「適切」にシステムを構築・管理しているPHPユーザは気にする必要はありません。

phpinfo関数を一般に公開するのは絶対に止めた方が良いです。基本的にphpinfo関数の出力はデバッグ用の情報です。セキュアなシステムではデバッグ情報を一般に公開する事はありません。開発時以外はシステムや言語のエラー情報を出力しないのと同じです。

open_basedirは「フェイルセーフ機能」であるため、これに頼った設計を行うべきではありません。Perlなどでtaintモードを信頼するのと変わりません。

# 言い古されてはいますが、セキュリティ対策は繰り返し言い続ける事が重要ですから。

「はじめてのPHP言語プログラミング入門」誤り募集中

Amazonの「はじめてのPHP言語プログラミング入門」に新しいコメント :)

全体の構成は、良いが、説明文の日本語がお粗末!!。
いわゆる、て、に、を、は、が、なってない。
特に、コード内での解説文は、再度、著者、自らが見直すべきと思う。
例示:抽象メソッドに関数に中身は記述できない
いたるところ、このような記述であるが、類推して読まざるを
えないため、わかりにくくなっている。
また、「入門」は、外した方が良い。

ご指摘の通り後で中途半端に書き加えたりした部分が残ってしまっている部分があると思います。本としての完成度と執筆に使える時間は比例すると思いますが、いつも締め切りギリギリに間に合わせている状況なので残ってしまいます(汗 最終の著者校正でもおかしな日本語を結構直した記憶があるので修正漏れが沢山あってもおかしくないと思います。またありがちですがコード中のコメントは見てなかったような気がします。

と言うことでおかしな日本語も大募集中です。メール、ブログへのコメント何でも結構です。見つけた方、ページ数と一緒に変な日本語を教えてください。よろしくお願いします。

自分でも変な日本語を見つけた箇所もありますが付箋が無くなってどこだったか分からない状態だったりします。「いたるところに」と書いてるので何箇所くらい見つけられたのか非常に興味があります。

抽象メソッドに関数に中身は記述できない

これは多分「関数に中身は記述できない」を最初に書き、これではおかしいので「抽象メソッドに中身は記述できない」にしたかったのだと思われます。例示の部分は後でPDFを検索してみよう。

【追記】検索しました。p140です。

abstract class AbstractClass2 {
// 抽象メソッドに関数に中身は記述できない
abstract public function AbstractMethod();

自分で読んでたら見逃しやすそうな部分です。(というより実際見逃していますけど)抽象メソッド、抽象クラスを知らない読者には??となる可能性もあるかも知れませんね。「いたるところ」全部教えてほしいです。

「てにをは」不良は結構残っている可能性は高いです。とりあえずはじめての誤植レポートなのでブログにも書いてみました。解りづらい表記・誤植も教えて頂けるとありがたいです。

正誤一覧のページ

0DAY Firefox Remote Code Execution and Denial of Service Vulnerability

Firefox 1.5.0.2以下のiframe.contentWindow.focus()に問題がありバッファがオーバーフローするようです。これ件フォローが無いので真偽は??です。

NoScript拡張を使って不用意にJavaScriptが実行されないように注意した方が良いかも知れません。

http://www.noscript.net/whats

IEもObjectタグで騒ぎになっていますね。セミナーでは「WebクライアントとWebサーバアプリは最も危険なアプリです」と言っていますが最近は色々ありすぎですね…

PHPの問題? BugTrackのレポート – Multiple PHP4/PHP5 vulnerabilities

このアドバイザリのメールの日付は何故か「2005/11/13」となっているのですが4/24のメールの様です。結論から言うとこのアドバイザリは通常は「無視してOK」です。

メールではメモリ消費のPoCとして以下のコードを例示しています。

i. wordwrap()
——
<?
$a = str_repeat (“A”,438013);
$b = str_repeat (“B”,951140);
wordwrap ($a,0,$b,0);
?>
——

ii. array_fill()
——
<array_fill (1,123456789,”Infigo-IS”);?>
——

iii. substr_compare()
——
&lt?substr_compare (“A”,”A”,12345678);?%gt;
——

まず1つ目ですが日本語環境でwordwrapを使っているケースは無いでしょう。更にプログラマが長大な分割文字(ラップした時の区切り文字)を指定する事はあり得ません。攻撃される事はまず無いでしょう。とは言っても典型的な整数オーバーフロー問題がある事は確かです。しかし、リスクがMediumとされていますがLowが適切でしょう。

【追記】古いwordwrapには整数オーバーフローがあったため修正されていました。まだ整数オーバーフローがあるのはおかしい、と思いPHP 5.1.2のソースを確認しました。少なくともPHP 5.1.2ではオーバーフローは発生せず整数オーバーフローが発生した場合、エラーが発生するコードになっています。と思っていたら、間違ってCVSのパッチ適用済みPHP5.1.2版のソースを見ていたようです。PHP5.1.2にも整数オーバーフローがあります。PHP 4.4.2も整数オーバーフローの影響を受けます。しかし、既に書いたとおり脆弱性自体の危険性は非常に低いです。同じようなバグが過去にレポートされていて直されていたと思うのですがまだ残っていたようです。

【追記2】substr_compare(“A”,”A”,12345678) ですがメモリ参照の問題でSegfaultします。バグですがこの手の問題は普通DoSとは言いませんね… PHP 5.1.3では修正されます。 “The start position cannot exceed initial string length.”とエラーになります。このエラーメッセージからも分かるように確保しているメモリよりも先のアドレスを参照している為、Segfaultしてしまったバグです。プログラム中に間違えて踏みそうなバグですが、この時点までこんなバグが残っていたのは色々な意味で「どうかな…」と思います。このバグ「クラッシュするよ」とレポートがあれば、PHPソース中で不具合を発生させる箇所が不明でも、バックトレース一発で原因まで特定できる単純なバグです。substr_compareはPHP5からの関数ですがzval(PHP変数のデータ構造体)には文字列(データ)の長さが保存されているのですが、これを使っていなかったのも「どうかな…」と思わされます…

2、3つ目ですがDoSが可能となるとしていますがこれに書いてあるコードでメモリを沢山消費しても仕方ないコードです。(ちょっと乱暴な例えかもしれませんが)C言語で「メモリをGB単位で確保して、確保したメモリにmemsetするとsegfaultする」と言っているような物です。言語とアプリケーションは違います。言語でメモリを大量に消費すると問題になるケースもありますが、これらは問題として取り扱うような動作ではありません。memory_limitの引っかかってしまっても当たり前でしょう。レポートした方はどうすべき、と考えているか聞いてみたいくらいです。

今までにもこの手のレポートはいくつかあったのですが、PHPをプログラミング言語として捉えていない人が多いのは驚かされます… たしか、最近もまた

function foo($arg) {
   foo($arg);
}

で「PHPがクラッシュするからおかしい」とメールがあったと思います。メモリは有限リソースなんですけどね… しかも同じ内容のメールは私が気が付いただけでも複数回見ています… 初心者向けに再帰呼び出し回数に制限を設けてもよいかも知れませんが、再帰呼び出し制限なんて必要なんでしょうか?

私が知らないだけかも知れませんが手続き型のライトウェイト言語(Ruby、Python、Perl、Tclなど)で「関数のコールスタックは1000まで」と言った感じでチェックしている(できる)言語がある??!

【追記】
気になりついでにPHP,Ruby,Python,Perlの動作も調べたので、気になる方はコメントをどうぞ。制限するか? しないか? ポリシーの問題のようですね。Perl,PHPは制限しない。Ruby,Pythonは制限する。で、最も中途半端なのはPHP ;) 詳しくはコメントをどうぞ。

Zend Framework 0.1.3

4/18にZend Frameworkのリリースがアップデートされていますね。

詳しくはリンク先のチェンジログを見ていただくとして

– Zend_HttpClient moved to Zend_Http_Client (Mike)

のように互換性に関連する修正や機能追加もありますが、あまり大きな変更や追加はなく基本的にはバグフィックスリリースになっています。

OpenDocumentがISO標準に

先頃発足したOpenDocument Format Alliance(ODF Alliance)は、推進中のファイルフォーマットが5月にInternational Organization for Standardization(ISO:国際標準化機構)の承認を得られるだろうとの自信を示している。

OpenDocumentがISO標準になると各機関の調達基準になるので良い事ですね。独自拡張を許さない調達基準であれば相互互換性も上がって便利です。

【追記】OpenDocumentはOpenOfficeの標準の保存形式です。一太郎も準拠していたと思います。

超極める!PHP

超極める!PHP

ムック形式本の「極めるPHP」の続き、「超極める!PHP」に何本か記事を書かせていただきました。こんな表紙になるそうです。

Amazonの著者の順序は書いたページ数が多い順、と聞いていたので私が一番沢山書いたのですね。40~50ページの間だったと思います。

オープンセミナー2006@四国 – 4月22日(土曜日)

詳しくはリンク先を見ていただくとして、4月22日(土曜日)に「オープンセミナー2006@四国」がサンポート高松 eとぴあ香川にて13時より開催されます。

参加費は無料です。できる限り多くの方にお越し頂ければ幸いです。

「オープンセミナー2006@四国」 開催のお知らせ

日本PostgreSQLユーザ会 四国支部

「オープンセミナー2006@四国」は2003年、2004年とPostgreSQLユーザ会主催のセミナーとして開催された 「PostgreSQLセミナー」の流れをくむセミナーです。

PostgreSQLとは無料かつ自由に利用可能なリレーショナルデータベースシステムです。日本PostgreSQLユー ザ会(以下JPUG)2006年3月よりNPO法人となり装いも新たに日本におけるPostgreSQLの普及と発展を主な目 的とし以下の活動を行っています。

* ・PostgreSQLの研究開発および普及促進
* ・PostgreSQLに関する情報の公開  
* ・会員相互および外部との技術的・人間的交流

これまでのPostgreSQLセミナーではPostgreSQLの話題が中心でした。本セミナーでは瀬戸内Linuxユーザ 会(STLUG)から2名の講師、IPAから1名、JPUGから2名の多彩な講師によるオープンソースとインター ネット関連のセミナーとして企画いたしました。インターネットの中核であるIXの内側、最新のOSS動向、 セキュリティ、PostgreSQLを対象のセミナーです。

セミナー開催のご案内が直前になってしまいましたが、中国・四国地方では数少ないオープンソース/イン ターネット/セキュリティのセミナーです。ご都合の良い方は是非ご参加ください。スタッフ一同お待ちし ています。

当日夜に高松駅近辺にて懇親会も予定しています。懇親会に参加をご希望の方は問合せ先にEメールでご連 絡下さい。

Firefox, Thunderbird, SeaMonkyは直ぐにアップグレードが必要

Thunderbirdのアップグレードが出たのでUS-CERTからアドバイザリが出てました。

Firefox: 1.5.0.2
Thunderbird: 1.5.0.2
SeaMonkey: 1.0.1

以外はリモートコード実行の脆弱性があります。重要なのは前にここにも書きましたがMozilla SuiteユーザはSeaMonkeyに移行しなければならないことです。

ついでにFirefoxしか普段使っていない方でIEにFlashをインストールしている方、IEのFlashを削除するかIEのFlashも最新にしなければなりません。
(Mozillaのどこかに書いてあるはず。先月のことだったかな?)

【追記】
Flash Player の更新に関する注意喚起
http://www.mozilla-japan.org/kb/solution/2092

「プロフィールが未設定となっております。」 Yahoo!を語るフィッシング?

備考:かなり古いブログですが公開し忘れしていた分です。

次のようなメールが来ました。一瞬、Yahoo!のメールかと思いました。

From: (profile_page_mail)@yahoo.com <profile_page_mail@yahoo.com>
To: (yohgaki)@ohgaki.net <yohgaki@ohgaki.net>
Subject: プロフィールが未設定となっております。

プロフィールが未設定となっておりますので、プロフィールを作成下さいませ。
すべてが無料となっておりますので、ご自由にご利用出来ます。

↓のURLからプロフィール作成が簡単に行えます。
(http)://www.profile-page.com/?member&mail=yohgaki@ohgaki.net

From:はyhoo.comドメインに偽装しています。
「120% SPAMメールだな」と思いましたがリンク先を確認してみる為にクリック。
やはり出会い系サイトのプロフィールを入力するページが表示されました。一目見てYahooとは関係ないと分かるサイトです。ページには

会員の方々のプライバシーの保護、および個人情報のセキュリティには万全を期しています。
あなたが当会の会員であることをはじめ、あなたの個人情報が外部に漏れることはありませんので、ご安心ください。

と書いてありますが、Phishingメールに載っているようなサイトが信頼できるはずがありません。

このメールはFromアドレスを偽造しているのでSPAMというよりPhishingと言った方が適切と思います。送信元を偽ったメールを送っても罪にはならないかな?

Phishingの危険性はサービス開始当事にあまり認識されていなかったとは言え、Yahoo!メールはgmail.comやhotmail.comの様に一目でフリーメールだと分かるドメイン名の方が良かったですよね。

自分で作るblogツール

Zend Frameworkの参考URLの一つになっている方の著書です。

自分で作るblogツール

著者のブログ個人サイト(?)やOSS公開サイトを見て「この人すごいなぁ」と思っていたら「自分で作るblogツール」と言う本を執筆されているではないでか。早速Amazonで1-Clickしてしまいました。

Amazonのコメントには知り合いのコメントもありますね。細かい事は気にしないので、どのような内容か楽しみです。

ところでWEBXP(Web eXtream Programmingの略かな?)フレームワークのダウンロードはどこからするのだろう?

Zend Frameworkの参考URL

とりあえず簡単に検索してみた結果です。リリース情報のページばほとんどで中身のあるページはまだあまり無いですね。お勧めがあったら教えてください。

英語
http://framework.zend.com/ (本家)
http://framework.zend.com/manual/en/ (英語マニュアル)
http://framework.zend.com/download/subversion (レポジトリへのアクセス)
http://www.phparch.com/zftut/index.php?p=0  (チュートリアル)

日本語
http://tdiary.ishinao.net/?year=2006;month=03;category=Zend+Framework  (使用感など。参考になる)
http://framework.zend.com/manual/ja/index.html  (日本語マニュアル)

日本語のチュートリアル的な物は無いのですね。マニュアルとソースを読めば大方使い方は分かりますからね。

http://tdiary.ishinao.net/ にも書いてありますが、private->protectedの変更は必要ですね。

http://tdiary.ishinao.net/20060329.html#p03 も参考になります。私はまだ「Zend_Frameworkを使ったことがある」とは言えないのでコメントできませんが、下記の感想はマニュアルとソースを読んだ限りでは同じ印象を持ちました。

もちろん動くものを作るだけならなんとかなるんだけど、Zend Frameworkベースのアプリケーションとして、ある程度の将来互換性も確保できるように作ろう、とか思うと現時点の完成度ではまだ無理だ*1。

一応Controller周りは結構完成度が高そうなんで、そこだけならばいけそうではある。かなりフィックスした仕様に見えるし、たとえデフォルトでの挙動が変更されたとしても、現状の拡張性の枠組みの中でカバーできるであろう柔軟性を備えている。プラグインの機構も応用範囲が広そうだ。

Viewに関しては、現状が最終仕様とはとても思えないんで、おそらくまだまだ互換性のない仕様変更があるだろう。っつーか、現在の Zend_Viewを使うくらいだったら、もっとこなれた他のテンプレートエンジン(Smartyとか)を使った方が、現時点ではずっとましだろう。

Zend_Logは、ログの保存がstaticメソッドに集約されたという設計はいいんだけど、デフォルトでCompositeじゃないのが使いにくい。自前のComposite Adapterとかを使ってカバーするという手もあるけど、その辺には仕様変更もありそうだし、現時点ではまだPEAR Logを使っておいた方がましかもしれない。

Zend_Db周りは非常にビミョー。Zend_Db_Adapterはあれで十分なんで、そのままいけるかなーと思いつつも、O/Rマッパー系は現状では実用レベルじゃないよなー。1テーブル単位のselectしかサポートしないO/Rマッパーで完結できるような設計なんて現実的じゃないし、ちょっとでもjoinしたければとたんにO/Rマッパーはつかえなくなっちゃうし。

拡張性と柔軟性重視なので無くても当たり前なのかもしれませんが、コード生成もしてくれたらうれしいのですけどね。

PHPを5.1.3RC3相当にバージョンアップ

最近このサーバのPHPをPHP 5.1.3RC1相当バージョンアップしていたのですが、バージョンアップ前のPHP 5.0.5(+パッチ多数)と比べると明らかにApacheがクラッシュする回数が増えていました。とりあえずPHP5.1.3RC3相当にバージョンアップしました。NEWSファイルを見ると分かりますがRC1->RC3だけでもかなりの変更・修正があります。クラッシュがどの程度直っているかな…