代码审计环境搭建
使用phpstudy搭建wamp环境
PHP核心配置
几个需要了解的PHP核心配置选项
- PHP_INI_USER
该配置选项可以在用户的PHP脚本或Windows注册表中设置 - PHP_INI_PERDIR
在php.ini/.htaccess/httpd.conf中设置 - PHP_INI_SYSTEM
在php.ini/http.conf中设置 - PHP_INI_ALL
在任何地方设置 - php.ini only
在php.ini中配置
几个核心的安全变量
- register_globals
用于将用户GET、POST等方式提交的参数注册成全局变量并初始位参数对应的值,使得提交参数可以直接在脚本中使用,php版本小于4.2.3设置为PHP_INI_ALL,5.3.0起废弃,5.4.0后移除了选项。
php版本是5.2.0
代码理解:
<?php
if($user=='admin') {
echo 'true';
}
这里看到,$user
没有用$_GET和$_POST接收,但是浏览器使用GET传参依然可以输出true,说明变量注册为了全局变量
可以看到开启这个配置会导致莫名的多出数据,存在安全风险。 - allow_url_include
是否允许包含执行远程文件,php5.2.0后默认设置为off,7.4.0后被废弃,配置范围是PHP_INI_ALL
代码理解:
<?php include $_GET['var'];?>
$var由外部输入,则$var可控,可以用来包含外部文件上传木马等
- magic_quotes_gpc
魔术引号自动过滤,自动在GET、POST、COOKIE变量中单引号(')双引号(") 反斜杠(\)空字符(NULL)的前面加上反斜杠(),但在PHP5中并不会过滤$_SERVER变量,php5.3后不建议使用,php5.4后被取消。
代码理解:
<?php echo $_GET['seay'];
- magic_quotes_runtime
魔术引号自动过滤,自动在单引号(')双引号(")反斜杠()空字符前加反斜杠(),该函数支队数据库或者文件中获取的数据进行过滤, - magic_quotes_sybase
魔术引号自动过滤,设置为ON会覆盖magic_quotes_gpc配置,这个函数会对GET、POST、Cookie进行处理,配置范围为PHP_INI_ALL,PHP5.4后取消。 - safe_mode
PHP内嵌的安全机制,php5.4前范围是PHP_INI_SYSTEM,之后被取消
这个函数用来限制了所有的文件操作函数(include(),file()),以及限制了一些函数执行命令(system(),exec())等 - open_basedir
限制PHP可以访问的目录,多个目录使用分号; 进行分隔。注意使用该函数限制的是目录的前缀,若要限制目录名则需要使用斜线结束路径名,举例:open_basedir=/www/a,则可以访问/www/ab ,如果需要限制,则/www/a/.
php版本小于5.2.3配置范围在PHP_INI_SYSTEM,大于5.2.3 是 PHP_INI_ALL - disable_functions
PHP禁用函数,可以禁用一些敏感函数的使用,配置范围为php.ini only ,使用逗号分隔函数名 - display_errors/error_reporting
PHP错误显示,表示是否显示PHP脚本的内部错误,在调试过程会打开这个选项,但是实际生产中建议关闭错误回显