ユーザが送信したデータ
多くのPHPで最も脆弱な部分は、言語自体に起因するものではなく、単に
セキュリティを考慮して書かれていないコードの問題です。この原因につ
いて、指定したコードの部分の意味を常に時間をかけて吟味し、予想外の
変数が投稿された場合に有り得る損害を確かめる必要があります。
例 5-17危険な変数の使用 <?php
// ユーザのホームディレクトリからファイルを削除します... または他の誰
// かのディレクトリかも?
unlink ($evil_var);
// 彼らのアクセスのログを書き込む.. または違うかも?
fputs ($fp, $evil_var);
// 何かちょっとしたことを実行.. または rm -rf *?
system ($evil_var);
exec ($evil_var);
?> |
|
常に注意してコードをテストし、Webブラウザから投稿された全ての変数
について次のような点を確認して下さい。
このスクリプトは、意図したファイルのみを受け付けるか?
例外的なまたは意図したもの以外のデータにより実行することが可能
か?
このスクリプトは意図した以外の方法で使用することが可能か?
このスクリプトは、悪い意味で他のスクリプトと組み合わせて使用す
ることが可能か?
トランザクションは適切に記録されているか?
スクリプトを書いた後ではなく、書いている時にこれらの質問を適宜行う
ことにより、セキュリティ改善のために不幸にして書き直しが必要になる
ということを避けることができます。こうした考慮をまず行うことにより、
システムのセキュリティを保証できるわけではありませんが、改善の一助
にはなりえます。
register_globals,magic_quotes, または他の便利な設定は、有効性、発
信元、指定した変数の値について混乱を生じる可能性があるため、設定を
オフにしたいと思うかもしれません。error_reporting(E_ALL) モードで
PHPを動作させた場合、確認または初期化する前に使用された変数に関し
て警告を発生させることも可能です。(これにより、処理時に通常とは異
なるデータを防止することが可能です)