ホームページ >バックエンド開発 >PHPチュートリアル >Apacheの非サイトディレクトリへのアクセス制限

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

WBOY
WBOYオリジナル
2016-06-23 14:06:34903ブラウズ

Apache 設定にセクションがあります
エイリアス /test "/var/www/web2/test"
41c7ad7fc02181440230cb28fdf6a1c9



この時点で /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 を使用すると、パスのリストにアクセスできます
……

いいですね

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。