###在配置文件php.ini中添加如下代码:
;http://php.net/display-errors
Error_reporting=E_ALL&~E_NOTICE&~E_STRICT&~E_DEPRECATED
上行代码的意思是,报告所有的错误,但除了E_NOTICE、E_STRICT和E_DEPRECATED这三种。
E_NOTICE:报告通知类错误,脚本可能会产生错误。
E_STRICT:启用 PHP 对代码的修改建议,以确保代码具有最佳的互操作性和向前兼容性。
E_DEPRECATED:运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。
####通过配置open_basedir来限制PHP访问文件系统的位置,将PHP执行权限限制在特定目录下。当访问的文件在该特定目录外,PHP将拒绝访问。
开启open_basedir可以有效的对抗文件包含、目录遍历等攻击,防止攻击者访问非授权目录文件。
open_basedir = /home/web/php/
限定PHP的访问目录为
/home/web/php/
allow_url_fopen = On
当PHP的远程访问选项allow_url_fopen开启时,允许PHP系统拥有从远程检索数据的功能,如通过PHP来访问远程FTP或Web,并使用file_get_contents()方法访问远程数据。
修改如下:
allow_url_fopen = Off //禁用PHP远程URL访问
allow_url_include = Off //禁用远程INCLUDE文件包含
开启安全模式
safe_mode=On //开启安全模式
safe_mode_gid=Off
开启后,主要会对系统操作、文件、权限设置等方法产生影响,减少被攻击者植入webshell所带来的某些安全文件,从而在一定程度上避免一些未知的攻击。
配置文件中的
disable_functions选项能够禁用PHP中指定的函数。
例如:
disable_functions=phpinfo,eval,exec,system……等等
phpinfo():显示php服务器的配置信息
eval():把字符串按照 PHP 代码来计算。
exec():用于执行一个外部程序。
system():执行外部程序并显示输出。
还用一些不常用到的函数,如proc_open(),pcntl_exec()等等,任何一个可执行的函数都可能为攻击者所利用。
除了以上这些已经列举出来的函数,在实际运用中,攻击者的手段更是千变万化,层出不穷。
譬如几年前在俄罗斯Antichat论坛上公布的一个新的方法,用来绕过disable_functions的安全机制。
在PHP上安装imap拓展后,将会激活函数imap_open,利用它的参数mailbox的不安全性,在设置SSH连接时,mailbox参数的值会以参数的形式传递给SSH命令。
输入命令:
ssh - oProxyCommand=”touch tmp.txt” localhost
当执行这条命令时,即使没有建立与localhost的SSH连接,依然会创建tmp.txt文件。
为了避免攻击者绕过disable_functions选项,可以在php.ini配置文件中将imap.enable_insecure_rsh选项的值设置为0,或者将imap_open函数也添加到禁用函数列表中。