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、アソシエイト・プログラムを自分用に付けるのは楽しみも増してお勧めと思います。

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

Momonga Linux 2リリース

Momonga Linux 2が2005/4/27にリリースされました。

主なパッケージ

*kernel 2.6.10
*gcc 3.4.3
*glibc 2.3.4
*xorg-x11 6.8.2
*emacs 22.0.50
*firefox 1.0.3
*httpd 2.0.54
*mozilla 1.7.7
*OpenOffice.org 1.1.4
*openssh 4.0p1
*PHP 5.0.4
*postfix 2.2.1
*ruby 1.8.2
*samba 3.0.14a
*sylpheed 1.9.9

早々にPHP5が投入されています。
# 入れたのは私ですが。
# 最近何もできなくて申し訳ない > メンバーの方。

2ポートディスク?

この記事に書いてある「2ポートディスク」ですが、個人的にはあまり必要性が感じられませんが何か見落としているのでしょうか?

「2ポートディスク」とは2つのポート(I/F)を持つHDDの事だそうです。一つは読み込み専用、もう一つは書き込み専用だそうです。Linuxの場合、同じパーティションを何度でもマウントできます。例えばApacheは読み込み専用でマウントされたマウントポイントを利用し、コンテンツの編集者は読み書き可能にマウントされたマウントポイントを使用すれば良いように思えます。
# SELinuxにすれば、という話もありますが。

同じCPUに接続されているHDDが2つポートを持っていてもマウントオプションで読み込み専用と読み書きを使い分ける方法と違いがあまり無いので、共有ディスクにして、という話なのでしょうね。詳しい情報が書いてないのでメモとして。

なぜMySQLなのだろう?

サイボウズが自社製品にMySQLを採用したそうです。MySQL ABとパートナー契約を結んだ、という事らしい。確かMySQLの商用ライセンスは250ユーロ程だったと思いますが、サイボウズもライセンス販売で商売しようという事なのでしょうか?

MySQLのコマーシャルライセンスのページにも書いてある通りサイボウズのケースは商用ライセンスが必要な事例にあたります。

MySQLのクライアント用のlibmysqlはオープンソースライセンスの場合、GPLライセンスであるためlibmysqlにリンクしているアプリケーションは完全ソースコードをGPLで公開しなければならない事になります。今までGPLとプロプライエタリなライセンスのデュアルライセンスのソフトウェアを開発してビジネスをするメリットを考えたことはありませんでした。「GPLはパックマン」と批判される関連製品のGPLライセンスによる完全なソースコード公開が必要な仕組みを利用して、自社製品をライセンス料を支払わずに利用している企業を見つけライセンス契約を結ぶと共にパートナーにし製品を販売する、というビジネスモデルは成り立ちますね。

まさかサイボウズがMySQLのライセンスがGPLであること、さらにGPLライセンスの内容をよく知らずに製品を開発して… と言う企業としては悲しい結末ということではなければと思いますが、どうなんでしょう?

# ヨーロッパではFirewall件がGPLライセンス違反で裁判になり
# 完全なソースを公開することで最近和解してましたね。
# PostgreSQLならBSDライセンスなのでこんな心配は無用ですが..

# 断っておきますが、私はPostgreSQLエバンジェリストです。
# しかし、アンチGPLライセンス派ではありませんし、
# 仕事ではMySQLも使っています。MySQLが特に嫌い、
# という事でもないです。

追記:
https://shop.mysql.com/?sub=vt&id=software
によるとトランザクション( InnoDB )をサポートするMySQLのライセンスは500ユーロ、InnoDBをサポートしない場合は250ユーロだそうです。

ITMediaの「GPLはパックマン」の記事ではBill Gates氏が何を批判していたか分からないですね。最近、php-devにlibnmzがGPLライセンスであるためモジュールをPHPに含めることができない、という問題が発覚しました。そのとき私が書いたメールにGPLと商用製品の問題について記述しています。

最近ではサンのJ・シュワルツ、オープンソースライセンスのGPLを批判にあるようにSUNの会長がGPLを批判してますね。

クロスサイトリクエストフォージェリ(CSRF)

クロスサイトリクエストフォージェリ(Cross-Site Request Forgeries – CSRF)の話。名前はともかくこれが新しい攻撃ではないことは高木さんも書かれている通り。誰でも思いつくセキュリティ上の不備ではないでしょうか? 私はもう何年も前からこういった事が起きないようライブラリ化しています。

HTTP Response Splitting Attackの時もHTTPヘッダに出力する値を確実にコントロールするのは当たり前。おかしなヘッダを送信させられるとキャッシュがおかしくなる事はまっとうなWebシステム開発者なら解っていて当たり前、と思っていたのですが…

セキュリティ関係の話をする時にはいつも言うことですが、「間違いを探すのではなく正しい事を確認するように」を実践していれば、なんだか訳の分からないセキュリティ用語が飛び出してきても慌てることは無いはずです。

参考:
http://d.hatena.ne.jp/hoshikuzu/20050130
いろいろリンクがあって参考になります。

追記:
入力済みの値の再検証を防ぐ方法(つまり期待したとおりの入力であること保障する方法)をいくつかのセミナーで説明したと思います。前のフォームに入力された値をメッセージダイジェストで確認していればCSRF問題は発生しません。フォーム毎にIDを発行し、再投稿を防ぐなど処理を行っていれば完璧です。

プライバシー保護の難しさ

PCが期待通りに動作しないとフラストレーションが溜まりますよね。特に理由も分からずクラッシュるのは腹立たしい限りです。オープンソース製品ばかりであればデバックオプションを付けてビルドしてデバッガーでバックトレースをとって確認する事は簡単です。

Windowsの場合、利用してるアプリケーションのほとんどはオープンソースでは無いですしWindowsアプリの開発者でもない限り開発環境は持っているはずもありません。

Microsoftはクラッシュレポートの機能を強化したいようです。クラッシュ時に動作していた全てのアプリケーションやアプリケーションが利用していたデータ等を含むさらに詳細な情報を収集できるようにするようです。この機能が会社等でどの様な意味を持つかはCNET Japanの記事に記載されています。

この機能、このままリリースされる事になるのか興味深いですね。

追記:
プログラムのディバックをした事がある方なら誰でも理解できると思いますが、クラッシュした時のデータが全てそろっているのと全く無いのでは効率が全く異なります。データがあれば一目で解ることが、データが無ければ見当がつかない場合も多くあります。この仕組みを取り入れれば製品品質の向上につながる事は確実と思います。クラッシュ情報から会社の社員がクラッシュした際に何をしていたか解ってしまう、という仕組みは会社でのPCの乱用を防ぐ効果があってある意味良い事かも?

64bitよりdual/multi core!

なんとなくネガティブなブログが多いのは最近の気分を表しているのかも… と言うことでプラス指向な話題も一つ。

今年は一つのダイに2のCPUが搭載されるデュアルコアCPUが発売される年です。雑誌等の記事によるとアプリケーションがマルチスレッドに対応していないから云々と書いていますが、一般ユーザとしては64bit化よりデュアルコア化の方がよっぽどメリットが大きいです。

デュアルコアCPUが早く安くなれば良いですね。そのためには4コアとかのハイエンドCPUを早くリリースして欲しい!# 4コアのCPUは気の長い話しですね。

RFIDの普及と健康の因果関係?

FUD(Fear, Uncertainty and Doubtの事)を流したい訳ではないのですが、この記事はFUDと思って読んでください。専門家ではないので詳しい事は知りません。

さてRFIDのチップから情報を読み取るには電波を当てる必要がありますが、生体への影響って研究が進んでいないような気が… 大丈夫なのかな?と思い簡単に調べてみる事にしました。

調べるきっかけになったのは、どこの国か忘れましたがヨーロッパのどこかでは保育園は高圧線から結構離れた場所でないと作れないとか、直ぐしたには家が作れないとか規制されている事を知っていたこと、大阪の高圧線が非常に密集している地域では白血病や癌の発病率が高い事、冷戦時代旧ソ連がアメリカ大使館に対してマイクロ波を照射していた事などを知っていたからです。携帯電話の電波が数分で脳細胞の細胞膜を破壊していることはニュースで大きく取り上げられたので広く知られていると思います。

RFIDと言っても色々種類があり読み取り距離は色々あります。読み取り距離が短い場合はRFIDのリーダ/ライターが健康への影響はないと思います。しかし、読み取り距離の長い物には出力がかなり大きな物もあります。

周波数 通信距離 電波法
UHF帯(860M〜960MHz) 日本は利用不可*1,米国は7m,EUは3m 米国は4Wまで,EUは0.5Wまで
2.45GHz帯 日本は1m,米国は2m,EUは0.7/2m 日本は0.1〜1W,米国は4Wまで,EUは屋外0.5W/屋内4Wまで

出典:ITPro

無線LANの出力がピーク値22mW程、PHSが80mW、携帯電話が200~800mWであることに比べると大きな出力である事が分かります。電池を持たないICチップに電流が流れICチップの情報を読み取れるだけの電波出力を得る為には大きな電波をあてる必要があるのは当然と言えます。

無線電波の人体への影響についてによると、電磁界による健康ヘの影響を指摘する報告は統計精度が低い、結果に一貫性が無いなどの問題があるため信用性が低いとしています。イギリスで発表され話題になった「携帯電話で脳腫瘍になる」という説もラットによる実験で脳腫瘍の発生に及ぼす影響は無いとしています。このレポートを作成した社団法人日本電気制御機器工業会はRFIDを推進する立場にあるので健康に影響があるとするレポートを公開するとは思えませんが…

確かに一定以下の出力で適切な距離、離れていれば問題は少ないかも知れません。しかし、違法な電波出力で個人情報収集やマーケティングを目的にRFIDチップ情報の読み取りを行う人達が必ず現れると思われます。これなら大丈夫というデータではなく、ここまでやると影響があるというデータを取りこれくらいなら大丈夫、と言えるデータを取らなければ信憑性を疑いたくなります。

セキュリティ面でRFIDの危険性を指摘されている場面は頻繁に聞くのですが、健康面ではどうなんでしょうか?九州総合通信局の基準によるとかなり高出力でも生体への影響は大きくないとも読めますね。時間があるときにこれらのリンク先を読んでみることにします。

リンク:
電磁界と健康
電磁波ナビ

電磁波が健康に及ぼす影響について
電波防護ための基準

電波の生体への影響

64bit OSの幻想

64bit版Windowsが投入されたそうです。

32bitから64bitになれば倍の速度でプログラムが実行できる、と素人の方は考えるかもしれません。しかし、実際にはデータバスやGPU(グラフィックスカードのCPU。ちょっと乱暴?)の様にbit幅が増えれば処理効率が上がる訳ではありません。VLIW等で複数の命令を同時実行するならともかく、既存のx86アーキテクチャで64bit化しても今のところ一般ユーザにはほとんどメリットがありません。メモリが16,32,64,128GBあるようなサーバでは64bit CPUを導入するメリットはありますが、このような大量のメモリを搭載しているPCはそう簡単に手に入るものではありません。

16bitから32bitへの移行では64KB(2^16)の非常に小さい単位しか扱えなかった状況が4GB(2^32)まで普通に扱えるようになりました。このメリットは非常に大きいのですが、2^32が2^64に増えても普通のアプリケーションでは2^32でも十分過ぎるくらいの大きさです。

64bit版Linuxのベンチマークでは32bit版の方が良い性能が良いケースも少なくありません。64bit版Windowsでも同様と思いますがどうでしょう?

# 64bit CPUにはnon-executable bitサポートがあるので、
# セキュリティ上は大きなメリットがあります。速度に期
# 待するのは無理、と言うことです。

アマゾンポイントカード

よく考えてみれば当り前と言えば当り前ですがアマゾンのアソシエイトプログラムを利用し、自分のサイトから本を買えばポイントカードの様にポイントが貯るはずですよね。先ほど試しに最近mixiで再会した(と言えるのか?)友人の本を買ってみました。集計結果はバッチ処理(?)らしく直ぐに反映されていないようですが、多分ポイントが貯っていると思います。アマゾンを利用している方、自分用にアソシエイトプログラムを使うのも良いのでは?

# 意外に1500円の商品券をもらえるのは早いかも。
# 今まで買った分のポイント返して!(笑

# ついでにこちらの翻訳本も購入しました。

天災にも負けず、人的ミスにも負けない重要インフラ防護策を——政府委員会

政府の情報セキュリティ基本問題委員会は4月22日、電力やガス、金融や情報通信をはじめとする重要インフラのセキュリティ強化策を「第二次提言」として取りまとめ、公開した。

基本的には歓迎しますが効率的に実施される事を望みます。専門家ではないので具体的な数値はないですが日本は同じ事をするにはアメリカに比べて多くのコストがかかり過ぎているように思えます。

NSA
の予算は確か4000億円/年くらいだったと思います。アメリカの交通信号の同期化はあまり進んでいないらしくアメリカ全土の信号を同期化するには1000億円くらい必要とニュースで言っていました。どちらも日本で同じ事を行うとすると、この金額の数倍は必要!となるように思えます。

# アメリカの信号は交差点の真中に一つあるだけの場合が
# ほとんどなので日本より安くなっても当り前と言えば当
# り前ですが。

安全性(それも求められる最低限の安全性)、リスクそしてコストとのバランスを良く考え、実効性がある対策をお願いしたいです。

参考:
内閣官房情報セキュリティセンター(NISC;National Information Security Center)

WikiにPHP関連リンクを追加

少しだけWikiの整備を進める。
Webで情報公開したり、マニュアルを翻訳して公開したりされている方は本当にすごいですね。はじめるにも気力が必要ですが持続している方は本当に偉い!

# とりあえず体裁は整ってきたのでまたしばらく放置かな…

IE7 Beta

時期は「今年の夏」ということ以外は明示していませんが、近日中(?)についに出るようですね。まだ、中身を全然知らないのですがW3C DOMに完全対応とかだと良いのですが。
# ありえないか..

phpbbにまたセキュリティーホール…

セキュリティホールの指摘は良いことですが、パッチする前はルール違反ですね… 内容をよく確認していませんがクロスサイトスクリプティングの様です。Low Riskという認識にも問題があるかと…

いろいろ異論があるとは思いますがクロスサイトスクリプティングのリスクは中程度とするべきと考えています。アカウントの乗っ取りが可能なリスクですから。phpbbは何年も前になるのですがソースをざっと見て直感的に危ないと感じたこと、実際にバグが多すぎなこと、などからphpbbを使った事がないので分かりませんが管理者のアカウントが乗っ取られても登録されている個人情報(メールアドレスなど)が盗めないような仕組みにはなっていないと思いますがどうなんでしょう?

/*
——————————————————–
[N]eo [S]ecurity [T]eam [NST]ョ – Advisory #14 – 17/04/05
——————————————————–
Program: phpBB 2.0.14
Homepage: http://www.phpbb.com
Vulnerable Versions: phpBB 2.0.14 & Lower versions
Risk: Low Risk!!
Impact: Multiple Vulnerabilities.

-==phpBB 2.0.14 Multiple Vulnerabilities==-
———————————————————

– Description
———————————————————
phpBB is a high powered, fully scalable, and highly customizable
Open Source bulletin board package. phpBB has a user-friendly
interface, simple and straightforward administration panel, and
helpful FAQ. Based on the powerful PHP server language and your
choice of MySQL, MS-SQL, PostgreSQL or Access/ODBC database servers,
phpBB is the ideal free community solution for all web sites.

– Tested
———————————————————
localhost & many forums

– Explotation
———————————————————
-==Bad Filter of HTML Code==-
phpBB2/profile.php?mode=viewprofile&u=\[]\
phpBB2/viewtopic.php?p=3&highlight=\[]\
#########################################################
-==XSS==-
POST /admin/admin_forums.php?sid=7bd54a5a9861ef180af78897e70 HTTP/1.1
forumname=<script>alert(‘NST’)</script>&forumdesc=<script>alert(‘NST’)</script>&c=1&forumstatus=0&prune_days=7&prune_freq=1&mode=createforum&f=&submit=Create new forum

Some people cannot find it interest someones yes but well i dont care because if you put some effort you know that
you can do a lot with this, like fooling the Admin of the Hosting to get his cookie & and then get access to whm…

– References
——————————————————–
http://neosecurityteam.net/Advisories/Advisory-14.txt

– Credits
————————————————-
Discovered by HaCkZaTaN <hck_zatan@hotmail.com>

[N]eo [S]ecurity [T]eam [NST]ョ – http://neosecurityteam.net/

Got Questions? http://neosecurityteam.net/

Irc.gigachat.net #uruguay [NeoSecurity IRC]

– Greets
——————————————————–
Paisterist
Daemon21
LINUX
erg0t
uyx
CrashCool
Makoki
KingMetal
r3v3ng4ns

And my Colombian people

@@@@”’@@@@’@@@@@@@@@’@@@@@@@@@@@
‘@@@@@”@@’@@@””””@@”@@@”@@
‘@@’@@@@@@”@@@@@@@@@””’@@@
‘@@”’@@@@””””’@@@””@@@
@@@@””@@’@@@@@@@@@@””@@@@@
*/

/* EOF */

検索フィールドを追加

なかなかWikiのコンテンツは拡充できませんが検索フィールドを復活させました。

Pukiwikiを使っている方で同じ様に検索フィールドを付けるのは簡単ですので好みの検索サイトを自分のWikiから検索できるようにするのも良いかも知れません。私はこのPukiwikiの機能を非常に気に入っているのですがあまり見掛けないので使い方を書いておきます。

Pukiwikiに他のサイトを検索するフィールドを追加する手順

  1. InterWikiNameのページに検索用のリンクを追加する
  2. 検索フィールドを付けたいページに#lookup()を使用して追加する

するだけで検索フィールドが追加できます。例えばgoogleを使ってPostgreSQLのマニュアルを検索するにはInterWikiNameに

[http://www.google.co.jp/search?ie=utf8&oe=utf8&lr=lang_ja&hl=ja&q=%22inurl%3Awww.postgresql.jp%2Fdocument%2Fpg802doc%2Fhtml%22 PostgreSQL] utf8

を追加します。InterWikiNameの書式は

[URL サーバ名] タイプ

の形式で記述します。PostgreSQLマニュアルの検索は一見複雑に見えるかも知れませんが特定のURLの中からページを検索するinurl:を使用しているだけです。タイプには文字エンコーディングの種類を指定します。これは日本語の場合、サイトが期待する文字エンコーディングで検索キーワードを送信しないと正しく検索できない為、明示的に指定する事になっています。

次に#lookupを使用してフィールドを表示します。

書式

#lookup(サーバ名、ボタン名)

使用例

#lookup(PostgreSQL,検索)

検索文字列をQuery Stringで指定するタイプの検索サイトであればほとんどのサイトがPukiwikiから検索できるようにできます。

ウィルスバスターの定義ファイル更新で、CPU使用率が100%になる不具合

ウィルスのパターンファイルや検索エンジンは自動更新になっている事が多いのでこういったリスクは付き物ですね。WindowsUpdateでも同じリスクはありますが、前にも書いた利便性とリスクをどう考えるかが問題ですね。自動更新のリスクの捉え方次第では「自動更新はダメ」としてしまいそうです。

しかし一般のユーザは、ほとんどが適切なタイミングで更新をしません。こういった問題があった事によって自動更新を止めるユーザが出なければよいのですが…