コンピューターのことなどを綴ったメモ (旧:目から鱗 w/SQLite)
Jeans & Development | 電子ブロック工房 | 三日坊主 | フロントページ |
PHPにsqlite_free_resultが無い訳 [Nucleus/SQLite]
2008年1月7日
PHP4のZendエンジンに導入されたリファレンスカウンティングシステムのおかげで、あるリソースがもう参照されなくなった場合に(Javaと全く 同様に)、そのリソースは自動的に削除されます。この場合、このリソー スが作成した全てのリソースはガーベッジコレクタにより開放されます。 このため、free_result関数を用いて手動でメモリを開放する必要が生じるのはまれです。
注意: 持続的データベース接続は特別で、ガーベッジコレクタにより破棄されません。
ガベージコレクタが自動的にやってくれるということらしい。
明けましておめでとうございます。 [General]
2008年1月4日
新年早々、北カリフォルニアは嵐の真っ只中。車での出勤途中、信号機がダウンしている交差点をいくつか通過した。日本ではほとんど経験が無いが、こちらの信号機は良くダウンする。ところが、もし交差点で信号機が働かなくても、事故になるようなトラブルはほとんど起きない。こうった場合、停止線で停止した順に交差点を通過するという暗黙のルールが適用される。つまり、停止線で車を止めた時に、自分よりも先に停まった車をすべて行かせれば、自分の番が回ってくるということである。
SQLite Manager で、新規データベースを登録するとき [Nucleus/SQLite]
2007年12月23日
また、sqlite_open() 関数でできた、長さゼロのデータベースファイルを登録しようとしても、うまく行かない。こうった場合は、一度データベースファイルを削除し、SQLite Manager に空のデータベースファイルを作成させるようにする。
以前同じ問題を解決していたにもかかわらず忘れていたので、ここにメモ。もしかしたら、新しいバージョンのSQLite Managerでは解決されているのかもしれないけれど…。

SQLiteの、便利だけれど危険な機能 [Nucleus/SQLite]
2007年12月21日
PHP は、データベースが最初にオープンされる際に phpという名前の特別な関数を登録します。 このphp関数は、事前に登録することなしにあらゆるPHP関数をコールする ために使用可能です。
例 2. PHP関数の使用例
<?php $rows = sqlite_array_query($db, "SELECT php('md5', filename) from files"); ?>
この機能、とても便利だけれど、諸刃の剣である。あらゆるPHP関数をコールすることが出来るのは、プログラマーにとって有益だけれど、同時にクラッカーにとっても有益であるということ。すなわち、SQLiteでSQLインジェクションが起きてしまった場合、それは即、PHPのあらゆる関数を呼び出すことが出来るということになる。例えば、file_get_contentsを使えば、サーバー上のファイルの内容を呼び出せるし、file_put_contentsを使えば、任意のファイルをサーバー上に構築したり出来てしまう。
幸いに、sqlite_create_functionを用いてオーバーライドすることが可能なので、この機能を無効化したり、呼び出す関数に制限を加えたりすることは簡単に出来る。例えば、
sqlite_create_function($db,'php','pi');
とすれば、クエリー中でphp関数を用いても、円周率の値を返すだけになる。
次期バージョンのSQLiteラッパーで対応します
架空のCMS [General]
2007年12月17日
Nucleusのconfig.phpとglobalfunctions.phpに相当する部分だけ、コードを書いてみた。
globalfunctions.phpに関する考察 [Nucleus]
2007年12月17日
Nucleusの長所と短所 [Nucleus]
2007年12月17日
Nucleus は、その設計思想から、軽さが売りである。ところが、利用の仕方によってはその設計思想が逆に災いして、重くなってしまうことが多々ある。こういったことの対策としては、NP_Cache・NP_EzCache・NP_znItemCacheなどのキャッシュ系プラグイン(それぞれ、Radekさん、Andyさん、佐藤(な)さん)を利用して軽くしてしまうのがとりあえずの対処方法といったところ。
根本的にこれを解決する試みとしては、コアでSQLクエリーの結果をキャッシュしてしまおうという方法(hsurさん)や、スキンそのものをPHPで完全に書き換えてしまう方法(ZAPAさん)が報告されている。こういったことを参考に、今後自分としてNucleusとどのように向き合ってゆけばいいのか考えるため、Nucleusの長所と短所を、思いつくままにピックアップしてみた。
Nucleus 3.31 SHA-encryption edition [Nucleus]
2007年12月15日
PHP のバージョンにより、MD5, SHA1, SHA512 を自動的に使い分ける仕様である。具体的には、PHP4.3.0 未満では MD5 を、4.3.0 以上 5.1.2 未満では SHA1 を、5.1.2 以上では、SHA512 を使うようにしてある。
また、先の記事で述べたように、ランダムな文字列を付加した後にハッシュ値を計算する機能を取り入れたので、たとえハッシュ値が洩れても、現在のところはパスワード解析はほとんど不可能。ここで使うランダム文字列(Salt)は、config.php で、$HASH_SALT として設定する。
以前のバージョンからのアップグレードにも配慮していて、アップグレードの瞬間にログインできなくなるどの不具合は無いはず。今までどおり使用していても、ユーザーはどこがどう変わったかまったく気が付かないはず。MD5 から SHA1/SHA512 への切り替えは、ログインの瞬間に行われる。
ダウンロードはこちらから。
<%media(20071216-nucleus331sha_a1.zip|Nucleus 3.31 SHA)%>