apache中对非站点目录的访问限制

WBOY
發布: 2016-06-23 14:06:34
原創
894 人瀏覽過

apache设置中有一段
Alias /test "/var/www/web2/test"

    Options FollowSymLinks Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all




如果此时 /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 = 允许访问的路径列表

也可以将 open_basedir 放在 apache 的 httpd.conf 或 .htaccess 中
php_admin_value open_basedir 允许访问的路径列表

apache 本身没有这个功能,也不需要这个功能
因为 apache 只是个二传手

你可以在 php.ini 中配置
open_basedir = 允许访问的路径列表

也可以将 open_basedir 放在 apache 的 httpd.conf 或 .htaccess 中
php_admin_value open_basedir 允许访问的路径列表
……

good

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板