点击蓝字
关注我们
1
屏蔽错误信息显示
错误日志显示,可能会暴露服务端的WebServer、数据库、PHP代码部署路径、数据库连接、数据表等关键信息,所以要屏蔽掉PHP错误信息!
在配置文件中设置
display_errors=On,则是开启了PHP错误显示,在PHP程序遇到错误时,就会被打印在页面上。
修改方式:
在配置文件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:运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。
2
在默认配置下,PHP版本号显示是开启状态,expose_php设置值为On,默认将PHP的版本号返回到HTTP请求的头部信息中,如下图所示:
3
防止全局变量覆盖
register_globals = On
当这个配置选项打开之后,可导致下面代码中的 $authorized变量被覆盖,无需认证用户名和密码就可以直接设置authorized的值为true,跳过认证进入登录状态。
4
文件系统限制
通过配置open_basedir来限制PHP访问文件系统的位置,将PHP执行权限限制在特定目录下。当访问的文件在该特定目录外,PHP将拒绝访问。
开启open_basedir可以有效的对抗文件包含、目录遍历等攻击,防止攻击者访问非授权目录文件。
open_basedir = /home/web/php/
限定PHP的访问目录为
/home/web/php/
5
远程访问限制
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所带来的某些安全文件,从而在一定程度上避免一些未知的攻击。
缺点是会对许多PHP函数进行限制,特别是与系统相关的文件打开、命令执行等函数,所有操作文件的函数将只能操作与脚本UID相同的文件,所有命令执行的函数将被限制只能执行php.ini里的
safe_mode_exec_dir
指定目录里的程序,例如使用shell_exec(),exec()等函数执行命令的方式将会被禁止。
6
关闭COM组件
在Windows环境中,PHP中的COM()函数可以创建系统组件对象来运行系统命令。
修改配置文件中参数:
com.allow_dcom=false
同时删除在php/ext/里面的文件:
php_com_dotnet.dll
防止被恶意利用。
7
禁用危险函数
配置文件中的
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函数也添加到禁用函数列表中。
总结:
完成以上配置,你的系统的安全性将会大大提升,但是作为安全人员,我们还需要与时俱进的去了解最新的攻击方法,才能防患于未然。
银天信息专注于软件研发、信息安全与智慧城市等领域的创新发展,是政府及企业数字化、智慧化建设的重要合作伙伴,银天信息立足”为社会服好务、为员工谋福祉”的社会责任,秉承“以技术为引领、以市场为导向、以用户为中心”的发展理念。
自1996年成立以来,银天信息以产业前瞻研究和行业深度理解为双引擎,基于云计算、大数据、物联网、5G等先进技术形成了贯穿政府、企业数字化转型生命周期的“全栈式”产品及解决方案,包括IT战略咨询、规划、设计、实施、运营与商业模式创新等,为用户输出同步国际的智慧城市建设体系,实现IT云化和数据价值激活,提升整体核心竞争力。目前,已经与政府、教育、能源、金融、电信、医疗等行业客户开展深入的合作。
编辑 | 田韵琦
设计 | 周晶晶
校对 | 李祖胜
原文始发于微信公众号(银天信息):这样设置php,让你的系统更安全
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论