実験の目的
「open_basedir リストディレクトリをバイパスする PHP の研究」の記事に従って、この記事の basedir をバイパスする方法が効果的であるかどうかを、さまざまな構成をテストすることで検証し、それによって PHP の open_basedir を安全に設定することができます。記事はすべてwindwosです Linuxでは、総当たりの推測が必要なため、テストは行われません
「DirectoryIterator + Glob」メソッドがopen_basedirをバイパスできるかどうかをテストします
実験環境
nginx + PHP 5.6.7 fastcgi モード、centos7 linux
以下で 1 つずつテストします
テストの詳細
でのみphp-fpm .conf の設定
php_admin_value[open_basedir]=/home/wwwroot/:/proc/:/tmp/
結果
Open_basedir はディレクトリ外で読み書きできないが、DirectoryIterator + Glob はすべてのファイルを正常にリストできる
open_basedir : /home/wwwroot/:/proc/:/tmp/ -- DirectoryIterator + Glob --. .. .autorelabel bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr vagrant var
包丁は basedir から出られない
fastcgi_param でのみ設定nginx
# set php open_basedir fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";
ここで、「$document_root」は nginx の変数であり、nginx の各サーバーのルート ディレクトリです
たとえば、サーバー www.iamle.com に設定されたルート ディレクトリは /home/wwwroot/www.iamle です。 com
PHP マニュアルをよく読んでください 次の段落があります
php.ini で定義された disable_functions または disable_classes の値は上書きされませんが、新しい設定が元の値に追加されることに注意してください。 php_admin_value または php_admin_flag を使用して定義された値は、PHP コードの ini_set() によってオーバーライドできません。 5.3.3 以降、PHP 設定は Web サーバー経由でも設定できるようになりました。つまり、php を設定するための niignx の fastcgi_param の設定は、on、off、1、0、true、false、yes、no などのブール値を具体的に設定するために使用され、php_value はすべてのタイプの値を設定するために使用されます。結果は上記と同じです open_basedir のディレクトリ 読み取りも書き込みもできませんが、DirectoryIterator + Glob ですべてのファイルを正常に一覧表示できます
包丁は basedir から抜け出すことができません
これは、HOST=www.iamle.com のときに open_basedir を設定し、PATH =/home/wwwroot/www.iamle.com/
に open_basedir を設定することを意味します。テストしたところ、2 つの設定のいずれも有効でした結果は同上
Open_basedirはディレクトリ外では読み書きできないが、DirectoryIterator + GlobでPHPサーバー上のすべてのファイルを一覧表示できる
basedirを包丁が横切ることはできない
個人的な結論
DirectoryIterator + Globですべてを一覧表示できるPHP サーバー上のファイルは無害に見えますが、実際には長期的な APT には間違いなく役立ちます
open_basedir は想像されているほど安全ではありません、おそらく他の誰かが open_basedir を読み書きできる 0day を持っているでしょう
個人的には。 nginx + php (fastcgi fpm-php) (lnmp) open_basedir の設定
3 つのアプローチを使用、母はもう私の php open_basedir について心配する必要はありません (そう願っています)
非常に冗長ですが、もっと安心ではないでしょうか
簡単に言うと、結果は以下の通りです、私は次のような面倒な設定です
[HOST=www.iamle.com]open_basedir=/home/wwwroot/www.iamle.com/:/proc/:/tmp/[PATH=/home/wwwroot/www.iamle.com/]open_basedir=/home/wwwroot/www.iamle.com/:/proc/:/tmp/
テスト中に、これら 3 つの場所の設定の優先順位は次のとおりであることも判明しました
"php.ini" > "nginx fastcgi fastcgi_param" > "php-fpm.conf"