- Web代码安全漏洞深度剖析
- 曹玉杰 王乐 李家辉 孔韬循编著
- 732字
- 2021-09-26 16:05:21
3.3 php.ini配置
很多PHP的安全问题及安全保障取决于php.ini配置。下面介绍有关安全的配置,了解和掌握安全的配置可以避免很多漏洞的产生及信息的泄露。
1.PHP安全模式
PHP安全模式是内嵌的安全机制,提供了一个基本的安全共享环境,默认情况下是没有启用安全模式的。打开安全模式的指令是safe_mode=on,当打开安全模式时会限制一些可用的功能。
2.安全模式下限制目录执行
在安全模式打开的情况下,如果想限制指定目录执行功能,可以通过指令safe_mode_exec_dir=/usr/local/bin来设置,例如:
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/054-i.jpg?sign=1738906445-j0coWLdi6opdKzOTjfzU6aG4hO3O76iY-0-c861c7d991c6c8dbca47ca814b721b4b)
3.安全模式下使用共享文件
在安全模式打开的情况下,如果需要使用共享文件,可以通过safe_mode_include_dir=/usr/local/include/php来包含想要使用的文件,例如:
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/054-2-i.jpg?sign=1738906445-pKOoPMMSDE1BzXgEt7tWEAJJG6JFTyIE-0-18ca5acae1aafb9517cfe54fd551aa9b)
4.限制脚本访问目录
如果想让PHP脚本限制只能访问指定的目录,可以使用指令open_basedir=/usr/local/www来设置,例如:
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/054-3-i.jpg?sign=1738906445-6ST7bR9exIX20HzSkKmcdCN01s9u5MkP-0-a7046ee4bb43d19c4b975d0a3feb2751)
5.危险函数限制
某些函数不需要用到且会影响到安全性,需要禁止使用,可以通过指令disable_funct-ions=system,passthru来禁止,例如:
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/054-4-i.jpg?sign=1738906445-Z02SeeS2NwudFYFfGKKmO2LjPfdEPbBT-0-58d421ee6a6494a60b2a5d729256bd9a)
也可以通过指令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来关闭错误提示,例如:
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/055-i.jpg?sign=1738906445-QCKEKZqlbDl1dPwhD4SP3eESRE7mAzIS-0-6b97a575fe7b57d1593a2add630e4dc8)
在错误信息关闭后,一般通过错误日志记录错误信息。使用指令log_errors=On将日志开启,使用error_log=/usr/local/apache2/logs/php_error.log来指定日志记录位置。日志记录文件要有写的权限,例如:
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/055-2-i.jpg?sign=1738906445-Q6KU8Wc14vxwe2RBN58Wqa5Cpnana61o-0-e9b8f4aed1d756ac280646506b41092e)