Jeans & Development:2007年 03月の記事

Nucleus の PostPluginOptionsUpdate にバグ [Nucleus]

2007年3月30日

PostPluginOptionsUpdate イベントにバグを見つけた。これは、プラグインオプションを変更したあとに起こるイベントである。このイベントを単独で使用するときにはバグは発生しないが、このイベントより前に起こる別のイベント(PostAuthenticationなど)とともに使用すると、変更されたプラグインオプションの値が、getOption() の戻り値として反映されない。

Cookie key を暗号化 [Nucleus]

2007年3月28日

 Nucleus では、ログインキーは md5 で暗号化されて MySQL データベースに保存されているが、クッキー認証キーは生のまま保存されている。これだと、万一、何かしらの脆弱性(SQL injection など)でクッキー認証キーが洩れた場合に、セッションハイジャックが起きる。
 md5 で暗号化すれば、万一クッキー認証キーが洩れても、暗号解読が必要なので、セッションハイジャックは難しい。ついでに、md5 による暗号化の前に$_SERVER['REMOTE_ADDR']の情報も加えておけば、XSS でクッキー認証キーが洩れても、別のIP address からの接続はほとんど不可能である。
 先日、MEMBER.php の改造でこれを実現しようとしたのであるが、なかなか改造コードが完成しなかった。改めてコアのコードを見てみると、globalfunctions.php の改変だと、比較的簡単にこれが実現できることが分かった。

SQLiteスピードアップ:PRAGMA default_synchronous = OFF [Nucleus/SQLite]

2007年3月27日

SQLite をWindowsで用いていて、データベースが大きくなるとスピードがかなり遅くなる現象に遭遇した。そうなった時に、スピードアップするための方法を見つけたので、メモ。

クエリーとして、

PRAGMA default_synchronous = OFF;

を実行すればよい。Nucleus-SQLiteの場合は、NP_SQLiteの管理画面から実行できる。default_synchronous の設定には3つ、『OFF』『NORMAL』『FULL』とあって、データ書き込みの際のOSとのシンクロを制御しているらしい(デフォルトは『NORMAL』)。『FULL』なら、OSがクラッシュしたようなときでもデータベースが壊れない。その代わり、速度が犠牲になる。『OFF』の場合は、速度は向上するけれど、データのハードディスクへの書き込みの際にOSがクラッシュすると、データベースが壊れる可能性がゼロで無くなる。

Windowsで利用するときに、『OFF』にすると速度の大幅な向上が見られた。こまめにデータベースをバックアップするようにすればこれでも良いだろう。一方、このラクーカンのサーバでは、『OFF』でも『NORMAL』でも速度の差がなかったので、『NORMAL』(デフォルト)にしておいた。

NP_match [Nucleus]

2007年3月14日

Nucleus 3.3 の<%if%>の新しい機能、doIf() を使ったプラグインの大まかな構想がほぼ決定。NP_ExtendedIf の後継となるもので、より高いパフォーマンスと機能が期待できる。この構想に従い、NP_ExtendedIf は引退させることになりそう(3.24より前のNucleus用に、wiki のページは置いておくけれども)。ちょっと勇み足かもしれないけれど、ここに公開。

このプラグインは、なるべく肥大化しない方向で、シンプルなソースコードになるように開発したい。おそらく、100行以下を一つの目安とすると思う。

(最新版の情報は、Wiki にあります。)