在设置一个应该彼此隔离的多个站点的托pipe环境时,我做了一个很明显的步骤,即configurationPHP,使其作为与每个站点相关联的用户运行,而不是像Apache用户那样运行,但有没有某种方式为了确保一个站点不能像Apache用户那样运行用其他语言(例如Python)编写的脚本? 我已经看到了像符号链接攻击这样的聪明攻击,它使用.htaccess规则和符号链接来欺骗Apache从其他网站以明文方式提供PHP文件(这与问题无关,只是一个例子),而且因为我不熟悉PHP以外的服务器端语言的设置,我不知道要通过Apache conf文件来检查和/或禁止什么,以确保以其他语言编写的脚本不能作为Apache用户。
例如,尽pipePHP设置为以网站用户身份运行,但如果网站遭到黑客入侵,黑客是否可以创build一个.htaccess文件,将.abc文件设置为以Perl脚本运行,如果服务器上的configuration不正确那么那些作为Apache用户运行?
什么是最好的方法来解决这个问题?
所以你主要担心的是,被盗用的帐户不能对其他帐户做任何坏事。
PHP和文件权限
如果将PHPconfiguration为针对每个域以不同的用户身份运行,则应设置您的目录,使其不具有对自己域之外的任何内容的写入权限。 然后使用PHP(或通过PHP调用的任何其他命令),它不能对服务器的其余部分造成任何伤害。
最佳做法是让脚本由user1拥有,但PHP在user2下运行。 对于客户访问,应该为user1configurationFTP。 用户2应该被授予写访问权限,只有真正需要的特定目录(caching目录,生成缩略图,通过PHP上传文件)。
但是很多人开始安装Wordpress和其他的CMS,不知道该怎么做,并给所有的东西写入权限(然后写得不好的CMS插件可以危及该域的所有PHP脚本)。 WordPress和其他CMS现在支持安装/升级,即使没有写入权限的PHP进程(他们只是要求FTPlogin,并自动使用它)。
另一个最佳做法是阻止对user2具有写权限的目录进行直接Web访问。 file upload应该由你的脚本检查,只有在有效的情况下,才能移动到外部可访问的目录(否则有人可以上传PHP脚本而不是JPG图像,并可能欺骗你的Web服务器执行它)。
阿帕奇
使用Apache的AllowOverride None指令来禁用.htaccess文件的使用,以便攻击者不能configuration其他CGI脚本的运行。 Apache应该只能读取所服务的文件(包含密码的PHPconfiguration文件不需要读取Apache的权限)。 禁用.htaccess ,用户无法更改Apacheconfiguration。
使用Options -FollowSymLinks (或-SymLinksIfOwnerMatch )来防止符号链接“攻击”。
安装mod_security来监视可疑活动并阻止像SQL注入这样的黑客攻击。
编辑 :如果需要.htaccess ,你需要决定你的主机将支持哪些选项,并只启用这些选项。 常用的安全选项包括(在AllowOverride列出):
Deny from all指令来拒绝访问部分目录) FollowSymLinks ,但它似乎也适用于这个); 除了使用mod_rewrite之外,如果目标文件/目录由符号链接本身拥有相同的用户,则Apache将只遵循符号链接。