カテゴリー: Computer

allow_url_fopenは無効に設定

Webサイト構築で注意しなければならない箇所は決まりきっています。PHPのiniオプションでかなり危険な設定ですがデフォルトで有効かつシステムレベルでのみ設定変更可能なiniディレクティブ、allow_url_fopenがその内の一つです。

このオプションが有効な場合、ほとんど全てのファイル関数でローカルファイル以外にURL(HTTP、FTP)を利用しリモートファイルを読み込みます。インクルード系の関数も同様です。

include('http://code.example.com/script.php');

と記述するとリモートサーバに保存されたスクリプトを読み込んでローカルホストで実行します。先日のphpbbのセキュリティーホールはこのタイプのミスだったようですね。このタイプのセキュリティーホールは【緊急より更に上】レベルの重大な問題です。しかし、何度も同じようなミスは色々なプログラムで発生しています。

私も機会がある度にこのオプションの危険性について紹介していますがどうも不毛な気がしてきました。この際、この機能はデフォルト無効、有効にした場合もallow_url_fopenは利用可能なサーバを列挙可能なように仕様を変更した方が良いですね。

パッチの作成は簡単なのですが…

追記:
allow_url_fopenがINI_SYSTEMである件を「あれ?」と思ってちょっと調べて見るとPHP4.3.4からINI_ALLだったものがINI_SYSTEMになっていますね。この変更、かなりまずい変更だと思います… サーバ管理者がallow_url_fopenの動作を制限できるようにするなら、sefe_mode_url_fopen等のディレクティブを新たに作り管理者が制限できるように実装するべきです。INI_SYSTEMに変えてしまうと共有サーバでは設定変更ができない可能性があります。スクリプト中の特定箇所でのみallow_url_fopenを有効にする、などの現実的な対処も行えなくなります。どうしたものか…

Firefox 1.0.4とMozilla 1.7.8のWindowsバイナリ

致命的なセキュリティホールフィックスを含むFirefox 1.0.4日本語版リリースの影響でMozilla Japanは大量のダウンロードリクエストの影響(?)でアクセス出来ないしづらいようですね。
とりあえず私のサイトにもWindows版バイナリを置いておきます。

Firefox 1.0.4(日本語版)
http://www.ohgaki.net/download/Firefox%20Setup%201.0.4.exe

Mozilla 1.7.8(英語版)
http://www.ohgaki.net/download/mozilla-win32-1.7.8-installer.exe

90cf68afbe5f22ae077a8ba4d6528733 Firefox Setup 1.0.4.exe
00f8a2cdd541944611ff08aa796a5685 mozilla-win32-1.7.8-installer.exe

# どこかに正式なMD5サムが掲載されていればどなたでも安心してダウンロード
# できるんですが…

# そうそう、そう言えばeEyeが未パッチのIEセキュリティホールに関して
# 多少詳しい情報を公開しています。対象となる問題はこれだったと
# 思います。
# http://www.eeye.com/html/research/upcoming/20050505.html
## うろ覚えです。間違っていたらご指摘ください。
## 参考: http://itpro.nikkeibp.co.jp/free/ITPro/NEWS/20050509/160520/

# しかしこのブログを読まれている方のブラウザの問題に対する
# 対応はすばらしいですね。(統計情報から推測しています)
# 平均的ユーザがこのレベルで対応できれば良いのですけど。

Xbox 360

Xboxには全く興味が無かったのですが

CPU PowerPCベースの3.2GHz動作のカスタムCPU

さらに

IBMと共同開発したCPUは、3つのコアを持ち、それぞれ物理的に2つのスレッドを実行可能で、合計6つのスレッドを並列処理できる。また、1MBの L2キャッシュを搭載する。FSBは21.6GB/秒、メモリインタフェースのバス帯域は22.4GB/s。システム全体で1テラフロップの演算処理能力を誇る。

これ、いくらなんでしょうね。
いつLinuxが動くようになるか楽しみです。

IBMも一枚かんでいるので360だったのですね。System/360の様に制覇を目指すんですね。
# 確かSystem/360の360の意味は「何にでも使え全方位隙無し」
# という意味だったかな?

PostgreSQL CE 7.4 Gold

この練習問題は以前にある方の日記から知ったのですが、これが結構難しい。前に一度やってみたのです散々な結果だったので、またそのうちと思っていてもう一度やって見ましたが… まあ今回も飲酒試験でしたが前よりは酔ってなかった&まえよりは時間をかけて回答したので少し凹みました。 前に試しにやってみた時の記憶は全く無かったので初めてと同じ状態とはいえ…

さすがに解答を見ても「何故?」と言う物はなく「そうでしたね…」という物ばかりでした。結構時間に余裕がある試験らしいので解答後に見直しをすれば合格するかも知れないレベルかも知れませんが、確実に合格するには勉強しないとならないですね。

この手の認定試験の効果に疑問符を付ける意見も多く見られますが、試験に合格する為に身に着けた知識は結構役立つと思います。例えば私の場合、MSCP試験を前の会社に在籍していた際に時間をみて受験し、Windows 3.1 ~ Windows2000 Serverまでは受験し合格しています。Windows2000 Professional/ServerのMSCP試験の為に身に付けた知識は、仕事で使うことはもうほとんど無いですが、WindowsServer、WindowsXPでも役立っています。WindowsのNETコマンドは覚えていて便利な事は多いです。普段使っているシステムやプログラムでも体系的に学ぶことは重要と思います。

PostgreSQL CE Goldのサンプル問題も無茶な問題では無いとは思います。しかし、この問題を解くための知識はマニュアルだけでは得られないような気がします。7.0以降のマニュアルは全てのページを読んでいないので、記憶もかなり曖昧、あくまで、気がするだけです。

PostgreSQL CE試験の知識も長い期間役立つはず、という事で素直に絶対合格!PostgreSQL CE認定試験〈Silver〉をアマゾンで購入しました。でもGold試験に役立つのかな?

この手の試験は割と良い成績である場合が多いのですが、今回は凹む結果だったのでちょっと悔しいですね。PostgreSQL 8.0 Gold試験はこっそり受験しよう。
# 確かMSCP試験を多数受験するきっかけもWindwos3.1の試験に1度目
# で合格しなかった事が原因だったような気がしますね。
# しかしこの試験、こっそり受験するには偽名が必要だったりして..

とりとめがなくなりつつありますが、これに合格しているのであれば自慢できると思います。この試験お勧めと思いますよ!

Winnyで個人情報11,255人分を漏洩させた職員を停職3カ月に

湯沢市によると、市職員は合併協議会事務局に出向していた際、事務局員が共同で使用するPC上でWinnyを使用していたという。

事件が明るみになったのは少し前の事ですが、処分が決まったようです。この手の漏洩事件は前から自治体でけでもいくつもあったはずですよね。この処分、重いと見るか軽いとみるか….

サイボーズがMySQLを選択した理由

サイボーズは独自システムからオープンソースシステムを活用する方向に移行をするようですね。

Berkeley DBも候補に挙がっていた、とこの事ですからトランザクションが必要ないことは明らかですね。現時点で選定したらSQLiteという選択肢もあったのかも知れませんね。

決定した時点での状況、Windowsサポート等を考えるとMySQLと言う選択も株主としても納得できる選択と思います。

新しいフレームワークではアプリケーションをPHPで記述しています。これもMySQLの採用と同じくらい大きな選択で、この部分をJavaにするかでも悩みました。

この選択もDBの選択と同様に微妙ですが、コードの一部を公開してカスタマイズを可能にするにはPHPの方が有利だと思います。新しく作るならPHP5が良いかと思いますが、もう作ってあるようですね。

このブログ、サイボーズの方もご覧になっているようなので営業を一つ。
セキュリティの監査など必要でしたら是非どうぞ。
# 本当に引合がきたりして(笑

だからSUNは衰退する

3月、本誌のインタビューでサンのマクネリー会長は、IBMがコンピューター業界で再び独占的な地位に立とうとしている現状を、こう皮肉った。人類にとって、恐竜の復活は悪夢に違いない。

メインフレームが復活するのは悪夢、と皮肉っているだけではSUNの将来も危ういでしょう。分散システムを広めるために大々的にTCO削減キャンペーンを行っていた事を忘れてしまったのでしょうか?

現在ではネットワークの単価はムーアの法則を遥かに上回るペースで下落した結果、集中システムを維持するために必要な広域ネットワークも無料同然で手に入るようになってきています。今やファイルサーバでさえ集中させてしまっても問題が無くなってきています。実際に広域LANを利用している企業も多数です。

たとえシステムが一箇所に集中していても、多数のサーバをメンテナンスするのは非常に手間がかかります。だからこそPC系のサーバでさえバーチャルサーバ技術への対応が急速に進んでいます。SUN自身もSunFireの仮想システムでメインフレームの様な機能を付けています。

メインフレームへの回帰のトレンドは随分前に始まっていました。ユーザはトータルで安ければメインフレームでもSUNでもPC Linux、Windowsでも何でも良いのです。トータルで安いとは通常の意味でTCOに加え、既存のソフトウェア資産が活用できるか、安全性・信頼性などの必要要件なども含め、最適なシステムは何かを検討し、Linux対応メインフレームが最適な選択肢であっても何ら不思議ではありません。

実際問題として「SUNにとって、恐竜の復活は悪夢」でしょう。SUNはエンタープライズ市場のハイエンドを狙い、いいところまで来た、と思っていたところに過去の遺産に市場を丸ごと横取りされてしまった形ですから。しかし、このままではSUNは衰退するばかりですね…
何故、今、新たにSUNを選択するのか?その理由が見当たりません。

# 個人的には元気にやって欲しい企業なんですけどね…

PHPに足りないもの

よく「中規模以上のプロジェクトにPHPは向かない」と聞きますがJavaに比べると確かにその通りです。Beanなんて考え方は無いですし「JCPで作られた数々の標準に対応するような物がない」と言われても仕方ない状況です。言語仕様についても結構アバウトで微妙な仕様が突然変わったりします。
# 最近では5.0.3でコンストラクタをprivateで宣言できなくなった件があ
# ります。これは次の5.0.5で修正されますが。
# PHP4->PHP5ではオブジェクトを配列にキャストするとPHP5ではおかしな
# 動作をするなどがあります。

(特に現在は)PHPでJavaのような環境を前提としたしシステム開発には無理があります。Javaのようにいたれりつくせりの環境、アプリケーションサーバの付加分散等までフレームワークでやってしまえるような環境であるJavaと比べれば、明らかにPHPは中規模・大規模に向かないと言えます。

PHPでの開発は、どちらかと言うと、C言語での開発に近いのではと思います。いたれりつくせりの標準フレームワークは無い事、詳細は異なりますがアバウトなデータ型管理、などC言語での開発に似ている点はいくつかあると思います。C言語がJavaのような標準フレームワークを持っていないくても色々な分野で利用されています。最近ではC言語での大規模開発は相対的に少なくなって来ているとは思いますが、C言語で中規模以上の開発は向かない、と言う方はいないと思います。

ここでプロジェクトの規模について簡単に整理してみます。プロジェクトの規模には大きく分けて2種類あると考えています。1つは開発時の開発体制の規模、もう1つは運用時のシステムの規模です。

「開発体制規模が大きなシステム=運用時のシステム規模が大きなシステム」は成り立ちません。PHPが向かないと言われているシステムは「開発体制規模が大きなプロジェクト」であり、「運用時のシステム規模が大きなプロジェクト」ではありません。作るアプリケーションによりますがPHPで大規模システム(後者)を構築すると非常に開発効率が良い場合もあります。開発者が20名を超える中規模(会社によっては100名以下は小規模という会社もいくつもあると思いますが)システムの場合、プロジェクト管理により高度な技術的な知識が必要となり、プロジェクトを進行しづらい状況もあるとは思います。反対に安直にJavaで作ってしまい、スケーラビリティに欠けるWebシステムになってしまった、と言う話もよく聞きます。
# スケーラビリティに欠けるシステムはPHPでも簡単につくれますが、
# Javaのフレームワークを過信する間違いはよく聞きます。

PHPに足りない物は開発者の分業を可能とするフレームワークです。PHP5になって、PHP4との互換性を考えなければ、フレームワークを構築する開発者は随分やりやすくなってきています。PHP5になりフレームワークをルールに則り利用する事を強制する事も可能なりました。DIを実装しているMapleなどのフレームワークが充実してくるとこの状況も徐々に改善してくる事と思います。特に日本製フレームワーク、MapleEnthaに期待したいと思います。

WindowsでCAPSキーをCTRLに変更

LinuxならXでもコンソールでも自由にレイアウト変更可能ですが、Windowsでもレジストリを変更すれば可能です。ノートPCが使いづらいのでCAPSキーをCTRLキーにするためにレジストリを変更しています。このレジストリの変更ではCAPSキーもCTRLになるようになっています。左下のCTRLはCTRLのままです。個人的にはCAPSキーの必要性がないので使えなくても大丈夫だからです。.reg拡張子を持つファイルとして保存してダブルクリックすれば変更完了です。

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
“Scancode Map”=hex:00,00,00,00,00,00,00,00,03,00,00,00,1d,00,3a,00,3a,00,1d,00,\
00,00,00,00

自分のVAIO(Windows XP Professional)で使っていますが、レジストリの変更は危険を伴います。当然ですが無保証です。ご注意ください。

DELL 20インチモニタが7万6千円

前回の様に約5万5千円という激安ではないですが、20インチUXGAモニタがオンラインクーポンを利用すると約7万6千円(送料、消費税込み)で買えます。価格.comでもこの価格帯は最安です。もう1台購入しました。

D-Sub、DVI-D、S-Video、Compositeと4系統もサポートしています。この機能は使ったことが無いので使い心地は分かりませんが、PIP機能を使用するとS-VideoとComposite入力を画面上に出力できるようです。
# つまり、DVDプレーや等の出力をキャプチャカード無しで
# 画面上に出力できる。出力する場所も選べるようです。

sRGBはサポートされていません。発色を優先するならやはりEIZOのLCD(EIZO FlexScan L565)方が良いですね。具体的にはEIZOのLCDに比べるとぎらぎらした感じがあり、白が白すぎるような気がします。今使っているこのDELLモニタはブライトネスを最小に設定して使用しています。色合いの問題を気にしなければお勧めのモニタと思います。23か24インチを一台買うより、この20インチモニタ2台の方がプログラムなどの作業は行い易いと思います。

ブートローダのインストールで固まる場合の対処

SATAが1台だけ搭載されているDELL PowerEdge 800にMomonga Linux 2をインストールを試みるとブートローダ(Grub)のインストール中に固まってしまいました。どうもブートローダのインストールができない状態のようなので、インストール中のXの画面から

ALT+SHFIT+F2

でVertual Console 2からtopコマンドと実行するとgrubプロセスが100%CPUを使用した状態でした。何らかの理由で無限ループに陥ったことが原因と思います。

とりあえずの対処は手動でGrubをインストールすればOKです。まず、grubのプロセスIDを調べてkill PID、そして

chroot /mnt/sysimage /sbin/grub-install –recheck /dev/sda

と入力して手動でGrubをインストールすればOKです。インストール出来ない場合は–recheckを削除して試してください。あとはXの画面に

ALT+F7

で戻り、「再起動しますか?」と聞かれているはずなので再起動すればOKです。
# バーチャルコンソールから再起動しても良いですが、一応…

Grubがインストールできないケースはあまり無い(?)とは思いますが、情報として。

session_regenerate_idの使い方に注意!

久しぶりにPHP-users MLを見るとsession_regenerate_id関数が「古いセッションIDに関連したセッション情報を削除しないのは困るよね」と投稿がありました。

バグレポートではBogus(バグじゃない)というステータスになっていました。確かにsession_regenerate_id関数は新しいセッションIDを生成する為の関数として追加されました。新しいセッションIDを作れば仕様上は問題ない、と主張できるかもしれません。しかし、アプリケーションの作り方によってはセキュリティ上の問題を発生させる原因になるので変更するべきですね。

セッションモジュール、セーブハンドラモジュール、シリアライザモジュールの各グローバル変数がマクロでアクセスされる作りになっています。(セッションモジュールは更にサブモジュールと持つ構造になっています。随分前ですがWeb+DB Pressに書いた通りです。興味のある方はどうぞ。)さらに引数などもマクロで定義されているため、初めて読むプログラマには非常に分かりづらいソースになっています。

PHPセッションモジュールのソースを読んだ事がある方なら分かりますが、グローバル変数を使用している、今回の場合はPSマクロで利用するグローバル変数、のでセッションID、PS(id)、を保存しないとならないように思えます。
# 今思いつきましたが、PS(data)にempty_stringを入れて
# おけばOKなような気がします。

session_destory関数にはバグがあるようでセッション情報は空になりますが、ファイルをunlinkしたいようなコードになっているのですが…、unlinkされていません。XFSなど、ディレクトリエントリにB-Treeを使用しているファイルシステムでは大量のファイルがあっても性能上や使用上問題ありません。個人的には50万ファイル(50万セッション)までファイル作成してベンチマークしてみましたが、性能は全く変わりませんでした。

ext3を利用している場合、2の問題で困る可能性があります。一つはinodeの枯渇ともう一つパフォーマンスの低下です。デフォルトではinodeが枯渇する可能性は大きいと思います。DoSの原因にもなるので注意しましょう。Linuxの場合、ディレクトリエントリはキャッシュされているので多数のファイルがある場合でもかなり良い性能ですが、それでも何十万ファイルレベルになると遅くなります。

セッション管理は有効期限を0に設定したセッションクッキー(ブラウザの終了と同時に削除されるクッキー)を利用し、自動再ログインなどの仕組みはアプリケーションでセキュリティ上の問題が許容される取り扱い方法を独自に実装する方が良い、と考えています。

もし有効期限が長いセッションIDを利用してログイン状態を保ち、セッションIDの再生成でXSSのリスクを軽減されている場合はsession_destroyを使用してセッションの削除を忘れないようにしなければなりません。ご注意ください。

自分用にAdsense!

仕事上、興味を持たなかったこと自体不適切(?)とも言えるかもしれませんが、アフィリエイト等に全く興味がありませんでした。新しく本を出版した際に、なんとなくAmazonのアソシエイト・プログラムはどの程度の利用されているか知りたくなり申し込み、このブログにも自分の書いた本のリンクを貼り付けています。

Web広告と言えばGoogleのAdsenseなのでAdsenseも申し込み、Wikiの方にはテキストリンクをページの一番下に貼り付けてみました。Amazonのアソシエイト・プログラムの時も使って見ないと分からなかったポイントカードとして利用方法がありましたが、Adsenseも同じでした。

Googleの広告は興味がある場合、時々クリックしていたのですが自分のWikiに貼り付けたテキスト広告はかなり的を得ています。Wikiのコンテンツはこれから拡充するレベルですが、ページに記載されている内容から関連する広告が表示されるので、クリックしてみたくなる広告が表示されます。Adsenseで儲ける事を目的とするのではなく、自分用のアンテナとしてAdsenseを利用する、と言う利用方法は良いのではないかと思いました。

趣味のページをお持ちの方でAdsense、アソシエイト・プログラムを自分用に付けるのは楽しみも増してお勧めと思います。

# そう簡単に儲かるものではありません。
# 儲ける事を目的にはじめてもがっかりするだけです。