Web代码安全漏洞深度剖析
上QQ阅读APP看书,第一时间看更新

3.3 php.ini配置

很多PHP的安全问题及安全保障取决于php.ini配置。下面介绍有关安全的配置,了解和掌握安全的配置可以避免很多漏洞的产生及信息的泄露。

1.PHP安全模式

PHP安全模式是内嵌的安全机制,提供了一个基本的安全共享环境,默认情况下是没有启用安全模式的。打开安全模式的指令是safe_mode=on,当打开安全模式时会限制一些可用的功能。

2.安全模式下限制目录执行

在安全模式打开的情况下,如果想限制指定目录执行功能,可以通过指令safe_mode_exec_dir=/usr/local/bin来设置,例如:

3.安全模式下使用共享文件

在安全模式打开的情况下,如果需要使用共享文件,可以通过safe_mode_include_dir=/usr/local/include/php来包含想要使用的文件,例如:

4.限制脚本访问目录

如果想让PHP脚本限制只能访问指定的目录,可以使用指令open_basedir=/usr/local/www来设置,例如:

5.危险函数限制

某些函数不需要用到且会影响到安全性,需要禁止使用,可以通过指令disable_funct-ions=system,passthru来禁止,例如:

也可以通过指令disable_functions=chdir,chroot,dir,copy,mkdir,rmdir来禁止对文件/目录的操作。

6.注册全局变量

注册全局变量是在PHP 4.2版本开始支持的,默认值为Off,直到PHP 5.4版本才被删除。如果将GET、POST提交的参数自动注册为全局变量,则能够直接访问其对应变量,这样对程序来说是非常不安全的。应该将PHP配置文件的指令register_globals设置为Off,即register_globals=Off。

7.magic_quotes_gpc

magic_quotes_gpc(魔术引)在开启的状态下,其作用是将get/post/cookie等传输的数据进行转义处理,对单引号(')、双引号('')、反斜线(\)与NULL(NULL字符)等字符都会加上反斜线,来减小数据库被注入的风险。需要将魔术引关闭,关闭命令为magic_quotes_gpc=off。

8.错误信息控制

在一些语法错误或其他情况下回显报错信息,可能会有敏感信息出现,如网站绝对路径、SQL语句、源码信息等,这样会给攻击者可乘之机,所以一般在程序上线后会通过指令display_errors=Off来关闭错误提示,例如:

在错误信息关闭后,一般通过错误日志记录错误信息。使用指令log_errors=On将日志开启,使用error_log=/usr/local/apache2/logs/php_error.log来指定日志记录位置。日志记录文件要有写的权限,例如: