首页 > 编程语言 >PHP代码审计(一)代码审计准备

PHP代码审计(一)代码审计准备

时间:2024-01-13 23:11:42浏览次数:33  
标签:审计 php 函数 GET 代码 INI PHP ini

代码审计环境搭建

使用phpstudy搭建wamp环境

PHP核心配置

几个需要了解的PHP核心配置选项

  1. PHP_INI_USER
    该配置选项可以在用户的PHP脚本或Windows注册表中设置
  2. PHP_INI_PERDIR
    在php.ini/.htaccess/httpd.conf中设置
  3. PHP_INI_SYSTEM
    在php.ini/http.conf中设置
  4. PHP_INI_ALL
    在任何地方设置
  5. php.ini only
    在php.ini中配置

几个核心的安全变量

  1. 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,说明变量注册为了全局变量

    可以看到开启这个配置会导致莫名的多出数据,存在安全风险。
  2. allow_url_include
    是否允许包含执行远程文件,php5.2.0后默认设置为off,7.4.0后被废弃,配置范围是PHP_INI_ALL
    代码理解:
    <?php include $_GET['var'];?>
    $var由外部输入,则$var可控,可以用来包含外部文件上传木马等
  3. magic_quotes_gpc
    魔术引号自动过滤,自动在GET、POST、COOKIE变量中单引号(')双引号(") 反斜杠(\)空字符(NULL)的前面加上反斜杠(),但在PHP5中并不会过滤$_SERVER变量,php5.3后不建议使用,php5.4后被取消。
    代码理解:
    <?php echo $_GET['seay'];
  4. magic_quotes_runtime
    魔术引号自动过滤,自动在单引号(')双引号(")反斜杠()空字符前加反斜杠(),该函数支队数据库或者文件中获取的数据进行过滤,
  5. magic_quotes_sybase
    魔术引号自动过滤,设置为ON会覆盖magic_quotes_gpc配置,这个函数会对GET、POST、Cookie进行处理,配置范围为PHP_INI_ALL,PHP5.4后取消。
  6. safe_mode
    PHP内嵌的安全机制,php5.4前范围是PHP_INI_SYSTEM,之后被取消
    这个函数用来限制了所有的文件操作函数(include(),file()),以及限制了一些函数执行命令(system(),exec())等
  7. open_basedir
    限制PHP可以访问的目录,多个目录使用分号; 进行分隔。注意使用该函数限制的是目录的前缀,若要限制目录名则需要使用斜线结束路径名,举例:open_basedir=/www/a,则可以访问/www/ab ,如果需要限制,则/www/a/.
    php版本小于5.2.3配置范围在PHP_INI_SYSTEM,大于5.2.3 是 PHP_INI_ALL
  8. disable_functions
    PHP禁用函数,可以禁用一些敏感函数的使用,配置范围为php.ini only ,使用逗号分隔函数名
  9. display_errors/error_reporting
    PHP错误显示,表示是否显示PHP脚本的内部错误,在调试过程会打开这个选项,但是实际生产中建议关闭错误回显

标签:审计,php,函数,GET,代码,INI,PHP,ini
From: https://www.cnblogs.com/Crayon-Blog/p/17963175

相关文章

  • 代码随想录 day18 找树左下角的值 路径总和 从中序与后序遍历序列构造二叉树
    找树左下角的值最简单就是想到层序遍历之后取第一个位置元素就是了递归的话需要先判断哪里最深的节点至于最左保持中左右的遍历顺序第一次得到最大深度处就是最左的路径总和有点像查找子树路径所以递归回溯是比较好的选择在求路径的适合,targetSum-node->val是否为......
  • thinkphp 便捷关联简写
    /**   *关联会员表   */   publicfunctionmember(){return$this->hasOne(Member::class,'member_id','member_id');}关联写法/***详情*@paramint$order_id*@returnarray*/publicfunc......
  • 用jacoco统计JAVA项目测试代码覆盖率
    一、概述Jacoco统计的是全量代码覆盖率。它不仅支持生成单元测试的覆盖率,也支持监控生成接口测试,功能测试的覆盖率。在新一代精准测试技术流的影响中,各大型单位对覆盖率的追求越来越迫切。作为一款开源产品,它主机面向Java语言,能够在字节码层面给出覆盖率,同时也能将字节码关联到......
  • (坚持每天写算法)基础算法复习与学习part1基础算法1-7——高精度减法(处理t=1和t>1代码的
    题目:思路:这一道题其实和高精度加法的思路是差不多的,都是使用算式进行模拟。重点:关于代码怎么写,在高精度加法那里还看不太出来(我也没有写),但是在高精度减法这里就完全可以看出来了。我们在加法算式里面,一般是A[i]+B[i]+t,但是也可以这么写:t+A[i]+B[i],我们可以先写进位......
  • 写代码时如何合理的画图表达逻辑结构
    在解决编程基础练习题时,使用图表是一种非常有效的方法,可以帮助你更清晰地表达逻辑结构。以下是一些建议:流程图:流程图是表达程序逻辑结构最常见的一种图表。在流程图中,你可以使用不同的图形表示不同的操作,如矩形表示处理步骤,菱形表示判断条件,箭头表示流程的流向。......
  • GDB调试之源代码查看与管理(六)
    一、源代码管理命令显示源代码:listorl,默认显示10行(在当前行往后5行,以及往前5行,总共10行代码)设置每次显示的行数:setlistsizexx查看指定函数代码:listtest_fun查看指定文件指定行代码:listmain.cpp:15显示源代码:查看指定函数代码:查看指定文件指定行代码:设置每次......
  • 十行python代码实现文件去重,去除重复文件的脚本
    1.导入依赖'''导入依赖'''frompathlibimportPathimportfilecmp2.函数说明filecmp.cmp(path1,path2,shallow=True)path1/path2:待比较的两个文件路径。shallow:默认为True,即只比较os.stat()获取的元数据(创建时间,大小等信息)是否相同,设置为False的话,在对比文件的......
  • idea 中java代码修改后运行代码不生效
    背景在使用idea开发项目过程中,经常会多版本切换开发,有时在一个分支中提交代码修改后,重新运行项目还是之前版本的项目,修改没有生效解决方案方案一依赖的模块版本不变,只修改了代码没有及时打到本地库。可以对依赖的模块执行mvncleaninstall后重新运行项目方案二原先的项目......
  • [代码随想录] 第四天
    19.删除链表的倒数第N个节点https://leetcode.cn/problems/remove-nth-node-from-end-of-list/思路:使用前后指针,当删除倒数第N个节点时,快慢指针之间应该间隔N个元素,当快指针到达链尾时,慢指针next指向所要删除节点。时间复杂度:O(N)/***Definitionforsingly-linkedlist.*......
  • Android 14 新特性代码 UUID.fromString & Matcher.matches 的细节改动(扒源码)
    文章目录前言UUID处理的更改正则表达式的更改结束前言Android14已经出来好久好久了…今天其他的暂且不论,单纯的讲一下OpenJDK17更新的两点变更(扒源代码)~对正则表达式的更改UUID处理首先,正则表达式的更改:现在,为了更严格地遵循OpenJDK的语义,不允许无效的组引用。您可能会......