セキュリティメモ
2008年5月14日
現在、Jeansの開発はすこしお休み中。気分転換にoyagameを作っていて、そちらが出来ればまたJeansに戻る予定。Jeansの開発を続けていて、これは今までやって来たプログラミングの中で、最も大変なプロジェクトだと気がついた。あせらず、ゆっくりやりたい。
さて、Jeansの骨格部分はあらかた仕上がっているので、ここでもう一度セキュリティーをチェックするため、『PHPサイバーテロの技法』を読んで、問題(になるかも知れない)部分をピックアップしてみた。
SQLインジェクション対策
SQLクエリーを作成するためのsql::fill()メソッドに問題がありそうだ。数値かどうかをis_numeric()で判断して条件分岐しているが、ここは『is_int() || is_float()』で分岐する必要がある。それに伴って、一部のコードを書き換える必要があるかも知れない。また、core::checkRequest()でのチェックだが、リクエスト名が『id』で終わる場合に、$request=(int)$request; などとしたほうが良いかも知れない(ここの部分は、実際にリクエストをどのようにクエリーに渡しているかの実例を見ながら判断)。
ヌルバイト攻撃対策
ヌルバイトについては、core::checkRequest()メソッドで入力値のチェックを行っているが、念のため、jeans::checkFile()メソッドでもチェックした方がよさそう。あと、ereg()系の関数を使っていないかどうか、再チェック(私はpregの方が好きなので、使っていないはず)。
HTTPヘッダ周り
head()関数をラップして、改行(CRLF)を引数に取れないようなメソッドを、コアに用意。
ファイルアップロード関連
ここは、未実装。実装の際は、拡張子のチェックをホワイトリストで行うこと。拡張子がイメージの場合、getimagesize()でチェックする。
XSS対策
<a href="xxxx">のxxxxの部分に挿入するためのサニタイジングメソッドを、コアに用意。
$_SERVER
現在の所、とりあえず REQUEST_URI と HTTP_REFERER のチェックは行っているが、もう少しチェックルーチンを追加した方がよさそう。
ざっと見たところ、こんな感じ。最初のベータバージョンをリリースする前に、再チェックする。
さて、Jeansの骨格部分はあらかた仕上がっているので、ここでもう一度セキュリティーをチェックするため、『PHPサイバーテロの技法』を読んで、問題(になるかも知れない)部分をピックアップしてみた。
SQLインジェクション対策
SQLクエリーを作成するためのsql::fill()メソッドに問題がありそうだ。数値かどうかをis_numeric()で判断して条件分岐しているが、ここは『is_int() || is_float()』で分岐する必要がある。それに伴って、一部のコードを書き換える必要があるかも知れない。また、core::checkRequest()でのチェックだが、リクエスト名が『id』で終わる場合に、$request=(int)$request; などとしたほうが良いかも知れない(ここの部分は、実際にリクエストをどのようにクエリーに渡しているかの実例を見ながら判断)。
ヌルバイト攻撃対策
ヌルバイトについては、core::checkRequest()メソッドで入力値のチェックを行っているが、念のため、jeans::checkFile()メソッドでもチェックした方がよさそう。あと、ereg()系の関数を使っていないかどうか、再チェック(私はpregの方が好きなので、使っていないはず)。
HTTPヘッダ周り
head()関数をラップして、改行(CRLF)を引数に取れないようなメソッドを、コアに用意。
ファイルアップロード関連
ここは、未実装。実装の際は、拡張子のチェックをホワイトリストで行うこと。拡張子がイメージの場合、getimagesize()でチェックする。
XSS対策
<a href="xxxx">のxxxxの部分に挿入するためのサニタイジングメソッドを、コアに用意。
$_SERVER
現在の所、とりあえず REQUEST_URI と HTTP_REFERER のチェックは行っているが、もう少しチェックルーチンを追加した方がよさそう。
ざっと見たところ、こんな感じ。最初のベータバージョンをリリースする前に、再チェックする。