PHP核心配置详解

来源:互联网 发布:阿里云网站域名 编辑:程序博客网 时间:2024/06/06 21:42

学习一下php代码审计,~漫漫安全路~

1.register_globals(全局变量开关)
该选项设置为on,会直接把用户GET、POST等方式提交上来的数据注册成全局变量并初始化值为参数对应的值,使得提交参数可以直接在脚本中使用。
register_globals 在PHP版本小于等于4.2.3时设置为PHP_INI_ALL。从php5.3.0起被废弃,不推荐使用,在php5.4.0中移除了该项。

测试:

<?phpif($user=='admin'){    echo 'true';}?>

2.allow_url_include(是否允许包含远程文件)
该配置为On的时候,可以直接包含远程文件,当存在include(var)var可控时,可以直接控制$var变量来执行php代码。allow_url_include在
php5.2.0后默认设置为off,配置范围是PHP_INI_ALL。与之类似的还有allow_url_fopen,配置是否允许打开远程文件。

测试:

<?phpinclude $_GET['a'];?>

3.magic_quotes_gpc(魔术引号自动过滤)
改配置开启,会自动在GET、POST、COOKIE变量中的单引号’双引号“反斜杠\及空字符NULL的前面加上反斜杠\,但是在PHP5中的magic_quotes_gpc并不会
过滤$_SERVER变量,导致很多类似client-ip、referer一类的漏洞能够利用。在PHP5.3后不推荐使用magic_quotes_gpc,PHP5.4后直接取消。

4.magic_quotes_runtime(魔术引号自动过滤)
在单引号’双引号“反斜杠\及空字符NULL的前面加上反斜杠\,与magic_quotes_gpc不同的是,处理的对象不一样,它只从数据库中或者文件中获取数据进行
过滤,所以一些开发者只处理了外部的输入而没有处理从数据库或者文件输入时,攻击者就可以先将攻击代码写入数据库,在程序读取、使用到被污染的数
据即可出发攻击。在php5.4之后被取消。

5.magic_quotes_sybase
magic_quotes_sybase指令用于自动过滤特殊字符,当设置为On时,会覆盖到magic_quotes_gpc=on的配置。与gpc处理对象相同,但是仅仅转义了空字符和把
单引号’变成了“,配置范围是PHP_INI_ALL

6.safe_mode(安全模式)
safe_mode=on,会对所有文件操作函数有限制,比如文件a.php和文件c.txt的文件所有者是用户a,文件b.txt的所有者是用户b并且与文件a.php不在属于用同一个
用户的文件夹中,当启用了安全模式时,使用a用户执行a.php删除c.txt可以成功删除,但是删除b.php会失败。对文件操作的include等函数也一样。可以使用
safe_mode_include_dir指令来配置可以包含的路径。第二个限制是通过函数popen、system、exec等函数执行命令或程序会提示错误。

7.open_basedir php可访问目录
open_basedir用来限制PHP只能访问那些目录,通常只需要设置web文件目录,如果要加载外部的脚本,需要把脚本所在目录路径加入到open_basedir指令中,多个目录
用;分隔。ps:open_basedir指定的是前缀不是目录名,如果配置open_basedir=/www/a那么open_basedir=/www/ab也可以访问,除非配置成open_basedir=/www/a/
php版本大于5.2.3是PHP_INI_ALL

8.diable_functions(禁用函数)
用来禁止一些敏感函数的使用,用本指令禁止一些危险函数时,要把dl()函数也加到禁止列表,因为攻击者可以利用dl()函数来加载自定义的php扩展以突破
disable_functions指令的限制。配置范围为php_ini only

9.display_errors和error_reporting错误显示
display_errors表明是否显示PHP脚本内部错误的选项,在调试PHP的时候,通常都把PHP错误显示打开,但是在生产环境中,建议关闭PHP错误回显,即设置
display_errors=off,同时还可以配置的一个指令是error_reporting,设置错误显示的级别。配置范围是PHP_INI_ALL。

0 0