阻止PHP/Apache访问站点目录以上的文件



我正在使用Apache虚拟主机和suEXEC(Centos 6.5、Apache 2.2.5和PHP 5.3.3)配置多域web服务器。

我想阻止PHP访问网站目录上方的文件夹/文件。我会一步一步地解释我的设置是什么,最后是什么问题。

这是我正在使用的文件夹结构:

/var/www/domain.com/public_html/

内部/var/www/我有这个:

drwxr-xr-x  2 root    root   4.0K Aug 13 13:30 cgi-bin/
drwxrwxr-x  4 apache  apache 4.0K Jan 28 09:16 site1.com/
drwxrwxr-x  4 apache  apache 4.0K Jan 28 08:44 site2.com/
drwxr-xr-x  4 apache  apache 4.0K Jan 30 11:08 site3.com/

和内部/var/www/site1.com/:

drwxr-xr-x 2 apache apache 4.0K Jan 30 10:16 logs/
drwxr-xr-x 3 user1  user1  4.0K Jan 30 11:08 public_html/

httpd.conf中site1.com的虚拟主机定义为:

<VirtualHost *:80>
ServerAdmin info@site1.com
DocumentRoot /var/www/site1.com/public_html
ServerName www.site1.com
ServerAlias site1.com
ErrorLog /var/www/site1.com/logs/error_log
CustomLog /var/www/site1.com/logs/access_log common
php_flag log_errors on
php_flag display_errors on
php_value error_log /var/www/site1.com/logs/php_errors.log
<Directory "/var/www/site1.com/public_html">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
SuexecUserGroup user1 user1
AddHandler application/x-httpd-php .php
Action     application/x-httpd-php /cgi-bin/php-cgi
ScriptAlias /cgi-bin/ /var/www/site1.com/public_html/cgi-bin/
<Directory "/var/www/site1.com/public_html/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

但是,我编写并执行了这个php脚本(www.site1.com/test.php)

<?php
system("id");
print "<pre>";
system("ls /var/www");
print "</pre>";
?>

我得到:

uid=503(user1) gid=503(user1) groups=503(user1)
site1.com
site2.com
site3.com

这意味着PHP可以访问我的服务器中的任何文件夹(包括/etc/var/usr等)

我想阻止Apache/PHP访问/var/www/site1.com 上面的所有文件夹

我应该如何配置Apache?

我在谷歌上对这个问题进行了广泛的研究,但我找不到解决方案。

非常感谢。

在生产环境中运行时,您应该真正使用以下内容:

disable_functions=exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

在您的php.ini文件中。允许诸如system或exec之类的东西是一个真正的安全缺陷。

你还想使用类似的东西:

php_admin_value open_basedir /var/www/site1.com/

在Apache vHost conf中,为了防止PHP越界。。。

目前,我可以将一个PHP文件作为user1上传到/var/www/site1.com/public_html/attacker.php,其中包含:

<?php
chmod("/var/www/site2.com", 777);
?>

然后,打开浏览器并导航到http://site1.com/attacker.php。Apache会很高兴地将其传递给PHP,并运行它,而且由于Apache拥有/var/www/site2.com,因此它非常能够更改权限。

砰!

user1现在可以访问/var/www/site2.com/,以及在该机器上拥有用户帐户的任何其他人。然后,它可以劫持该网站,创建新的文件来托管比特币挖矿业务,出售伟哥等。

注意:即使你相信你的用户不会做任何恶意的事情,也不能保证第三方不能访问他们的帐户并做这样的事情。最好的处理方法是包含一个受损的帐户,这样它就不会对整个系统造成太大的损害。

欲了解更多信息,请查看:

  • http://php.net/manual/en/ini.core.php#ini.open-basedir
  • https://www.cyberciti.biz/faq/linux-unix-apache-lighttpd-phpini-disable-functions/

相关内容

  • 没有找到相关文章

最新更新