2.安全牛PHP代码审计:PHP配置文件详解
笔记
介绍
他是一个全局的配置文件
在PHP启动的时候会被读取,他启动的时候只读取一次,如果要生效要重启PHP
文件配置在这个里面
汉化版出来的内容
https://blog.csdn.net/qq_41860876/article/details/107042443
配置的基本语法
大小写敏感
1
2directive= value指令=值)
foo=bar≠FOo=bar运算符
1
|,&,~,!
空值的表达方式
1
2
3foo= ;
o= none;
o= "none";基本配置的安全模式
安全模式
`safe_mode = off`
安全模式,用来限制文档的存取、限制环境变量的存取,控制外部程序的执行。本特性已在PHP5.4.0被移除
看一下他默认是关闭的状态
对比一下他开启和关闭的区别
我用的PHP的版本是5.2
- 关闭的情况下
php代码URL地址:1
2
3
4
5
6
7
8
9
$a = $_GET['cmd'];
echo "<pre>";
system($a);
echo "<pre/>";
http://192.168.31.95/a.php?cmd=ipconfig
结果 - 开启的情况下
然后在重启服务器
PHP代码URL:1
2
3
4
5
6
7
8
9
$a = $_GET['cmd'];
echo "<pre>";
system($a);
echo "<pre/>";
http://192.168.31.95/a.php?cmd=ipconfig
结果
可以看到没有任何结果
限制环境变量存取
safe_mode allowed_env_vars = string
指定 PHP 程序可以改变的环境变量的前缀,当这个选项的值为空时,那么 php 可以
改变任何环境变量。如:safe_mode_allowed_env_vars = PHP_,当这个选项的值为空时,那么 php
可以改变任何环境变量
外部程序执行目录
safe mode exec dir = “E:\Local Test\WWW"
禁用函数
disable_functions
为了更安全的运行PHP,可以用此指令来禁止一些敏感函数的使用,当你想用本指
令禁止一些危险函数时,切忌把dl()函数也加到禁止列表,攻击者可以利用dl()函数加载
自定义的php扩展来突破disable_function。配置禁用函数时可以使用逗号分隔函数名
默认情况下是什么都没有
咧
现在我禁用一个函数然后再重启服务器
然后使用这个函数
PHP代码
<?php
1 | $a = $_GET['cmd']; |
结果
com组件
com.allow dcom = false
PHP设置在安全模式下(safe_mode),仍旧允许攻击者使用COM()函数来创建系统
组件来执行任意命令,我推荐关闭这个函数来防止出现此漏洞
使用COM()函数需要在PHP.ini中配置extension=php_com_dotnet.dll,如果PHP
VERSION<5.4.5 则不需要
基本配置控制变量
全局变量注册开关
register_globals = off
php.ini的register_globals选项的默认值预设为Off,在4.2版本之前是默认开启的,当 register globals 的设定为 On 时,程序可以接收来自服务器的各种环境变量,包括表单提交的变量,这是对服务器来讲是非常不安全的,
所以我们不能让它注册为全局变量。
rr egister_globals=Off
时,服务器端获取数据的时候用$_GET[‘name’]来获取数据register_globals=On
时,服务端使用POST或者GET提交的变量,都将自动使用全使用局变量的值来接受值开启和关闭的比较
我用的PHP版本是5.2- 关闭的状态
php代码
- 关闭的状态
魔术引号自动过滤
magic_quotes_gpc= on
本特性已在PHP5.4.0被移除
magic_quotes_gpc = Off 在php.ini里是默认关闭的,如果它打开后将自动把用户提交对sql的查询语句进行转换,如果设置成ON的话,php会把所有的单引号(“”),双引号(“”) ,反斜杠(“\”)和空字符(NULL)加上反斜杠进行转义,它会影响 HTTP 请求的数据有(GET、POST、Cookies),开启它会提高网站的安全性,当然,您也可以使用 addslashes 来转义提交的 HTTP 请求数据,或者用 stripslashes 来删除转义
基本配置,远程文件
是否允许包含远程文件
allow—uri include = off
该配置_为on的情况下,可以直接包含远程文件,若包含的变通为司投的慵况下,可以直接控制変置来执行PHP代码
是否允许打开远程文件
allow uri open = on
允许文件通过调用 URL重写来打开和关闭写权限,默认的封装协议提
供的ftp和http协议来访问文件
基本配置,目录权限
HTTP头部版本信息
expose_php = off
防止了通过http头部泄露的php版本信息
文件上传临时目录
upload_tmp_dir
上传文件临时保存的目录
用户可访问目录
open_basedir = E:\Local Test\WWW
该访问的文件,一定程度上限制了phpshell的危害,如果不设置的话,则采用系统的临时目录能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问,不应
基本配置,报错休息
内部错误选项
display_errors = on
候通常把PHP错误显示打开
错误报告级别
error_reporting = E_ALL & ~ E NOTICE
表明显示PHP脚本的内部错误,网站发布后建议关闭PHP的错误回显,在调试的时这个设置的作用是将错误级别调到最高,显示所有问题,方便排错