PHP代码审计之常见重要配置

颓废 2019年5月19日08:56:52评论587 views字数 1919阅读6分23秒阅读模式

一般php的配置文件都是php.ini
还有一个用户级别的配置文件.user.ini.

启用全局变量

默认为register_globals = off,我们需要改成register_globals = on

有些程序例如OSC需要启用全局变量.这个设置的作用是关闭自动注册的全局变量,
在设置为On的时候,php会将`$_POST,$_GET,$_COOKIE,$_ENV,$_SESSION数组中的$key=>$value`直接注册为变量,比如`$_POST['username']`就会被注册为`$username`。
虽然方便了调用,但是会有三个问题:

  • 不知道变量是哪里来的,`$_POST`来的还是`$_SESSION`来的呢?非常不方便别人阅读代码。
  • 变量之间互相覆盖,引起不必要的麻烦。
  • 安全问题。所以要设置为Off。

我们可以来看看,首先我们先打开php.ini文件:
PHP代码审计之常见重要配置

我们来看下代码先:
PHP代码审计之常见重要配置

然后:
PHP代码审计之常见重要配置

短标签

默认short_open_tag = On

先不说明,继续看下去,我们先打开php.ini看这个短标签是否打开了:
PHP代码审计之常见重要配置
我这里是默认打开的(PHP-5.2.17版本)

那么开启了短标签有上面用呢,我们来看看代码部分:
PHP代码审计之常见重要配置

我们来访问一下网站,看看有啥效果:
PHP代码审计之常见重要配置
这里`<?=phpinfo()?>`就起作用了

那么,短标签有什么用呢,比如在我们上传文件的时候,网站会对我们上传的内容里面的代码读取,如果读到了`<?php?>`就不允许上传,如果这个网站开启了短标签,我们就可以直接使用`<?=xxx?>`来getshell

安全模式

默认是`safe_mode = off`,我们改成`safe_mode = on`
设置过程不解释了

我们现在代码是`system('whoami');`,看看网站返回了啥内容:
PHP代码审计之常见重要配置
可以看到这里啥都没执行,因为安全模式自动禁用了一些函数,这里就不一一说了,不知道的可以直接去官网看下

禁用函数(function)/类(class)

默认是`disable_xxx =`,我们将改成`disable_functions = print_f`,那么print_f函数就不能使用了,我们将`disable_classes = `改成`disable_classes = xxx`那么xxx类就被禁用了。

设置上传及最大上次文件大小

`file_uploads = On`允许上传
`upload_max_filesize = 2M`上传的文件不能大于2M

文件上传临时目录

默认是`upload_tmp_dir = `
上传临时文件保存的目录,需要可写权限,如果没写内容,则采用系统临时目录,比如:/tmp等。

用户访问目录限制

默认是`open_basedir =`
使用open_basedir选项能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问不应该访问的文件,
一定程度上限制了phpshell的危害.我们一般可以设置为只能访问网站目录,表示允许访问当前目录(即PHP脚本
文件所在之目录)和/tmp/目录,有效防止php木马跨站运行

错误信息控制

默认是display_error = On
这个功能就是说站点发布前不需要关闭,因为可以看到错误信息,方便调试,但是在发布之后就必须关掉,否则会报出这些信息:
PHP代码审计之常见重要配置
关闭后(注意:每次修改了`php.ini`之后都需要点phpstudy的重启):
PHP代码审计之常见重要配置

设置错误报告级别

默认是`error_reporting = E_ALL`
这个设置的作用是将错误级别设置为最高,可以显示所有的问题,方便查错,也有利于写出高质量的代码。
日志级别是一些常量,在`php.ini`中有写,推荐使用 `E_ALL | E_STRICT`,即所有级别

魔术引号

从PHP 5.3.0 起废弃并从 PHP 5.4.0 时移除
`magic_quotes_gpc = On`
`magic_quotes_runtime = Off`
为 GPC (Get/Post/Cookie) 操作设置 `magic_quotes` 状态。当`magic_quotes`为`on`,所有的 ' (单引号)、" (双引号)、/(反斜杠)和 NULL 被一个反斜杠自动转义。

如果打开了,那么:
PHP代码审计之常见重要配置

是否允许打开远程文件

`allow_url_fopen = on`
本选项激活了 URL 形式的fopen封装协议使得可以访问URL对象例如文件。默认的封装协议提供用ftp和http协议来访问远程文件,一些扩展库例如zlib可能会注册更多的封装协议。

是否允许包含远程文件

`allow_url_include = off`
本选项激活允许 `include`,`include_once`,`require`,`require_once`等函数使用URL形式的fopen封装协议。简单来说就是可以包含远程文件。

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
颓废
  • 本文由 发表于 2019年5月19日08:56:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PHP代码审计之常见重要配置https://cn-sec.com/archives/67965.html

发表评论

匿名网友 填写信息