停止 PHP 读取/写入其他 PHP 文件的能力

停止 PHP 读取/写入其他 PHP 文件的能力

我有一个非常小的托管网站,托管一种聊天软件。我为每个用户提供了一个 /home/ 受限 ftp,但他们有自己的 www 文件夹,可以上传内容。

我的一个用户上传了这个php文件:http://pastebin.com/YAJW8weh- 似乎能够保存 php 文件并允许他下载它们。

利用这个,我认为他能够访问我的一些文件,并且我的一个 php 文件中有我的 MySQL 密码,然后他获得了包含我所有客户密码的数据库的访问权限。

我怎样才能阻止这种情况再次发生?当为用户提供他们自己的 /home/ 目录时,我应该采取哪些预防措施。

答案1

您想禁用主文件夹的 php。

当使用 PHP 作为 Apache 模块(Ubuntu 10.04 上的默认模块)时,将以下内容添加到 Apache 配置中

<Directory /home>
  php_admin_value engine Off
</Directory>

为了安全起见,你也许应该使用Options -ExecCGIAllowOverride None。请参阅官方 Apache安全提示。如果您的网络服务器启用了其他类型的脚本(如mod_perl),请确保也为主文件夹禁用它们。

答案2

您必须保护您的网站,Linux / Unix 在这方面做得很好,为您网站根目录中的群组和其他人设置最小权限:

chmod 0711 /var/virtualhosts/example.com

# ls -ald /var/virtualhosts/example.com
drwx--x--x  4 example    example    4096 Oct  9 08:43 example.com

使用以下方法限制 PHP 中的文件访问open_basedir

# virtual host config
php_admin_value open_basedir "/var/virtualhosts/example.com:/tmp"

# directory config
<Directory /home/bad_user>
    php_admin_value open_basedir "/home/bad_user:/tmp"
</Directory>

禁用 PHP 的危险功能:

# /etc/php.ini
disable_functions = "dl,shell_exec,passthru,exec,
                    popen,system,proc_terminate,proc_close,stream_socket_server"

使用su — 用户测试他们在您的网站上拥有的权限。

su - apache -s /bin/bash 
cd /var/virtualhosts/example.com
ls -al
cat /var/virtualhosts/example.com/db.config.php

答案3

suPHP 确实是您最好的选择。您可以设置每个用户以自己的用户身份运行脚本,然后 chmod 他们的目录,以便其他用户无法读取它们。请执行不是依赖 open_basedir,它不会 100% 起作用。

由于您允许上传,因此您总是需要担心有人上传不该上传的内容。我建议运行 Linux Malware Detect 之类的程序。当 shell 和 DoS 脚本之类的内容上传到您的服务器时,它会向您发出警报。

相关内容