open_basedirとは、PHPから開くことのできるディレクトリを限定する機能です。
ディレクトリトラバーサル対策には入力値から.や/を外すのが正道ですが、万一それが突破された際の防波堤として役に立ちます。
が、
見てのとおり、exec()やpassthru()関数はopen_basedirの制限を突破します。
exec('ls')ってやった場合lsは何処にあるかというと普通/bin/lsあたりで、そのためだけにわざわざini_set('open_basedir', '/bin/')なんてやったりしませんね。
ということでexec()を使う場合、open_basedirはディレクトリトラバーサル対策にはなりません。
まあexec()に入力値は使うなってこった。
ディレクトリトラバーサル対策には入力値から.や/を外すのが正道ですが、万一それが突破された際の防波堤として役に立ちます。
が、
ini_set('open_basedir', '/hoge/fuga/'); file_get_contents('../hoge.txt'); //エラーになる exec('more ../hoge.txt'); //エラーにならない
見てのとおり、exec()やpassthru()関数はopen_basedirの制限を突破します。
exec('ls')ってやった場合lsは何処にあるかというと普通/bin/lsあたりで、そのためだけにわざわざini_set('open_basedir', '/bin/')なんてやったりしませんね。
ということでexec()を使う場合、open_basedirはディレクトリトラバーサル対策にはなりません。
まあexec()に入力値は使うなってこった。
PR
トラックバック
トラックバックURL: