Apacheの非サイトディレクトリへのアクセス制限

WBOY
リリース: 2016-06-23 14:06:34
オリジナル
894 人が閲覧しました

Apache 設定にセクションがあります
エイリアス /test "/var/www/web2/test"
<ディレクトリ "/var/www/web2/test">
オプション FollowSymLinks インデックス MultiViews
AllowOverride なし
順序allowed,den y
すべてから許可




この時点で /var/www/web2/test ディレクトリに php ダウンロード ページがある場合、
down.php は次のようになります:

$filename=$_GET["file"]; ob_end_clean();header("Expires: 0");if(!$file = @fopen($filename,'r')){        echo 'read error';        exit();} flock($file,LOCK_SH);$filesize=filesize($filename); Header("Content-type: application/octet-stream");Header("Accept-Ranges: bytes");Header("Accept-Length: ".$filesize);Header("Content-Disposition: attachment; filename=" . $file_name);if($filesize>0){        echo fread($file,$filesize);}fclose($file);ob_get_contents();ob_end_clean();exit;
ログイン後にコピー




このページのテストには大きな抜け穴があります。顧客はブラウザに down.php を入力しますか? file=../../../etc/xxx
システムファイルのダウンロードに似ています。
サイトが独自のディレクトリとサブディレクトリにのみアクセスでき、他のディレクトリにはアクセスできないように Apache を設定するにはどうすればよいですか?


ディスカッションへの返信 (解決策)

サーバー権限!

suPHP をセットアップして、別のユーザーの権限で PHP を実行するだけです

if(preg_match('#../#',$filename)){
exit
}

Apache 自体にはこの機能はありません。また、それも必要ありません
Apache は単なるセッターであるため、この関数は必要ありません

php.ini で open_basedir = アクセスを許可されるパスのリストを設定できます

Apache の httpd.conf または .htaccess に open_basedir を置くこともできます
php_admin_value open_basedir allowed アクセスされるパスのリスト

Apache 自体にはこの機能がありませんし、この機能も必要ありません

Apache は単なるセッターであるため

php.ini で open_basedir = アクセスを許可されるパスのリスト を設定できます

open_basedir を Apache の httpd.conf または .htaccess に置くこともできます
php_admin_value open_basedir を使用すると、パスのリストにアクセスできます
……

いいですね

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート