PHP作为一门强大的脚本语言被越来越多的web应用程序采用,不规范的php安全配置可能会带来敏感信息泄漏、SQL注射、远程包含等问题,规范的安全配置可保障最基本的安全环境。下面对php.ini进行安全设置:
1、禁用注册全局变量
PHP在进程启动时,会根据register_globals的设置,判断是否将$_GET、$_POST、$_COOKIE、$_ENV、$_SERVER、$REQUEST等数组变量里的内容自动注册为全局变量。
register_globals = On时,在PHP中提交的变量,都将自动注册为全局变量,能够直接访问,
会引发安全问题,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭。在php.ini配置文件中做如下修改:
register_globals = Off
2.打开安全模式
php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如system(),同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd,但是默认的php.ini是没有打开安全模式的,我们把它打开
safe_mode = on
3. 用户组安全
当 safe_mode 打开时,safe_mode_gid 被关闭,那么 php 脚本能够对文件进行访问,而且相同组的用户也能够对文件进行访问。
建议设置为:
safe_mode_gid = off
如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要对文件进行操作的时候。
4.禁用远程url文件处理功能
像fopen的文件处理函数,接受文件的rul参数(例如:fopen(‘http://www.demo.com’,’r’)).),这个功能可以很轻松的访问远程资源,然而,这是一个很重要的安全威胁,禁用这个功能来限制file function是个不错的选择,在php.ini配置文件中做如下修改:
allow_url_fopen = Off
5.关闭远程包含、本地包含
PHP通过此选项控制是否允许通过include/require来执行一个远程文件(如http://demo.com/evil.php或ftp://demo.com/evil.php)。关闭这个选项,在php.ini配置文件中做如下修改:
allow_url_include =Off
6.打开magic_quotes_gpc来防止SQL注入
SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。我们开启
7.隐藏PHP文件版本信息
我们经常会在一个http头里发现这样的信息:
X-Powered-By:PHP/5.2.11
PHP的版本号暴露无疑,攻击者很容易捕获到此信息,要想解决此问题我们只要在php.ini做如下配置
expose_php = Off
8.关闭错误提示
此控制项控制PHP是否将error、notice、warning日志打印出来,以及打印的位置。错误信息主要用于辅助开发,但是在线上环境却非常危险,因为这样将会把服务端的WebServer、数据库、PHP代码部署路径,甚至是数据库连接、数据表等关键信息暴露出去,为攻击者带来极大便利。所以建议产品上线时修改为Off。
display_errors = Off
开发环境和生产环境参考:PHP输出所有错误信息
9.设置错误提示等级
此配置项控制PHP打印哪些错误日志(errors,warnings,notices)。默认情况下会打印所有的错误日志,线上环境我们应该不显示具体的E_NOTICE日志信息。在php.ini做如下配置修改:
error_reporting = E_ALL& ~E_NOTICE
10.关闭PHP进程启动时产生的错误
php启动时产生的错误由display_startup_errors选项进行控制,这个和display_errors是分开的。为了避免PHP进程启动时产生的错误被打印到页面上而造成信息泄漏,此选项在线上服务也应该被配置为Off。
为了方便开发和调试,开发环境可以将其设置为On。线上服务的我们在php.ini做如下配置修改:
display_startup_errors =Off
11.Posing Limit
限制PHP的执行时间、内存使用量、post和upload的数据是最好的策略,可以做如下的配置:
max_execution_time = 30 ; Max script execution time
max_input_time = 60 ; Max time spent parsing input
memory_limit = 16M ; Max memory used by one script
upload_max_filesize = 2M ; Max upload file size
post_max_size = 8M ; Max post size
12.禁用危险的php函数
disable_functions=popen,pentl_exec,passthru,exec,system,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,show_source,escapeshellcmd,escapeshellarg,curl_exec,curl_multi_exec,parse_ini_file,assert
由此我们可以看出PHP默认的配置是面向开发者,我们提供线上服务的PHP环境要做一些正确的PHP基础安全配置,这样可有效避免很多高危漏洞,避免泄漏服务器敏感信息,从而提升产品的安全性。

