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

该博客讨论了Apache服务器中一个可能导致系统文件被非法下载的安全漏洞。通过down.php页面,用户可以利用路径遍历攻击下载任意文件。解决这个问题的方法是在PHP配置中使用open_basedir限制可访问的路径,或者在Apache配置中使用suPHP来限制PHP脚本的执行权限。此外,还建议在代码层面检查文件路径,避免包含父级目录。这有助于保护服务器免受此类攻击。
摘要由CSDN通过智能技术生成

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中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值