明けましておめでとうございます。
2008年1月4日
今年もよろしくお願いします。
新年早々、北カリフォルニアは嵐の真っ只中。車での出勤途中、信号機がダウンしている交差点をいくつか通過した。日本ではほとんど経験が無いが、こちらの信号機は良くダウンする。ところが、もし交差点で信号機が働かなくても、事故になるようなトラブルはほとんど起きない。こうった場合、停止線で停止した順に交差点を通過するという暗黙のルールが適用される。つまり、停止線で車を止めた時に、自分よりも先に停まった車をすべて行かせれば、自分の番が回ってくるということである。
なぜそのような暗黙のルールが出来るかであるが、これは単に、別の状況でのルールを信号機のダウンした交差点に当てはめているからである。アメリカには、4 way STOP と言って、交差点に通ずる道のすべてが一旦停止になっているところがある。こういったケースでは、先に停止した車から通行してよいことになっている。
日本では信号機が壊れることなどめったに無いだろうが、もし壊れてしまった場合に大きなトラブルになる可能性が高い。きちんとしたルールが無いため、警察官がその交差点に駆けつけてシグナルを出すまでは、通行する車はどうしてよいかわからない状態になると思う。
アメリカでのこういったルールは、いわゆるフェイルセーフな仕組みといえる。Webアプリケーションのセキュリティーを考える場合にも、そういったフェイルセーフな仕組みをなるだけ導入しておきたい。
Nucleusのケースだと、例えばconfig.phpを、include()関数でインクルードするのか、require()関数でインクルードするのかという問題がある。『include('./config.php');』と記述した場合、無事にconfig.phpがファイルとして開けて$DIR_LIBSが設定されれば問題は無い。ところが、何かしらの理由でこれに失敗した場合、プロセスは停止せずに次の命令に移る。『$DIR_LIBS.'xxxx.php';』などの命令で、リモートファイルのインクルードが可能になるケースが出てしまう。一方、『require('./config.php');』と記述した場合は、ファイルを開くのに失敗した場合にプロセスが停止するので、セキュリティーホールにならない。したがって、require()関数を用いたほうが、よりフェイルセーフである。
他にも、例えばXSSやSQLインジェクションがあっても被害を最小限にとどめる(セッションハイジャックさせない)とか、いろいろなセキュリティー対策を施しておきたい。
新年早々、北カリフォルニアは嵐の真っ只中。車での出勤途中、信号機がダウンしている交差点をいくつか通過した。日本ではほとんど経験が無いが、こちらの信号機は良くダウンする。ところが、もし交差点で信号機が働かなくても、事故になるようなトラブルはほとんど起きない。こうった場合、停止線で停止した順に交差点を通過するという暗黙のルールが適用される。つまり、停止線で車を止めた時に、自分よりも先に停まった車をすべて行かせれば、自分の番が回ってくるということである。
なぜそのような暗黙のルールが出来るかであるが、これは単に、別の状況でのルールを信号機のダウンした交差点に当てはめているからである。アメリカには、4 way STOP と言って、交差点に通ずる道のすべてが一旦停止になっているところがある。こういったケースでは、先に停止した車から通行してよいことになっている。
日本では信号機が壊れることなどめったに無いだろうが、もし壊れてしまった場合に大きなトラブルになる可能性が高い。きちんとしたルールが無いため、警察官がその交差点に駆けつけてシグナルを出すまでは、通行する車はどうしてよいかわからない状態になると思う。
アメリカでのこういったルールは、いわゆるフェイルセーフな仕組みといえる。Webアプリケーションのセキュリティーを考える場合にも、そういったフェイルセーフな仕組みをなるだけ導入しておきたい。
Nucleusのケースだと、例えばconfig.phpを、include()関数でインクルードするのか、require()関数でインクルードするのかという問題がある。『include('./config.php');』と記述した場合、無事にconfig.phpがファイルとして開けて$DIR_LIBSが設定されれば問題は無い。ところが、何かしらの理由でこれに失敗した場合、プロセスは停止せずに次の命令に移る。『$DIR_LIBS.'xxxx.php';』などの命令で、リモートファイルのインクルードが可能になるケースが出てしまう。一方、『require('./config.php');』と記述した場合は、ファイルを開くのに失敗した場合にプロセスが停止するので、セキュリティーホールにならない。したがって、require()関数を用いたほうが、よりフェイルセーフである。
他にも、例えばXSSやSQLインジェクションがあっても被害を最小限にとどめる(セッションハイジャックさせない)とか、いろいろなセキュリティー対策を施しておきたい。