代码审计之PHP核心配置详解

news2025/1/21 5:58:15

代码审计之PHP核心配置详解

  • 1.register_globals(全局变量注册开关)
  • 2.allow_url_include(是否允许包含远程文件)
  • 3.magic_quotes_gpc(魔术引号自动过滤)
  • 4.magic_quotes_runtime(魔术引号自动过滤)
  • 5.magic_quotes_sybase(魔术引号自动过滤)
  • 6.safe_mode(安全模式)
  • 7.open_basedir PHP可访问目录
  • 8.disable_functions(禁用函数)
  • 9.display_errors和error_reporting错误显示

PHP_INI_*常量的定义

在这里插入图片描述

1.register_globals(全局变量注册开关)

该选项在设置为on的情况下,会直接把用户GET、POST等方式提交上来的参数注册成全局变量并初始化值为参数对应的值,使得提交参数可以直接在脚本中使用。

register_globals在 PHP版本小于等于4.2.3时设置为PHP_INI_ALL,从 PHP 5.3.0起被废弃,不推荐使用,在PHP 5.4.0中移除了该选项

register_globals设置为on且PHP版本低于5.4.0时,如下代码输出结果为true:

?php
if($user=='admin') {
echo 'true';
//do something
}

2.allow_url_include(是否允许包含远程文件)

在该配置为on的情况下,它可以直接包含远程文件,当存在include ($var)$var可控的情况下,可以直接控制$var变量来执行PHP代码

allow_url_include在PHP5.2.0后默认设置为off,配置范围是PHP_INI_ALL。与之类似的配置有allow_url_fopen,配置是否允许打开远程文件**

配置allow_url_include为on,可以直接包含远程文件。测试代码如下:

?php
include $_GET['a'];

在这里插入图片描述


3.magic_quotes_gpc(魔术引号自动过滤)

当该选项设置为on时,会自动在GET、POST、COOKIE变量中的单引号(')、双引号(")、反斜杠(\)及空字符(NULL)的前面加上反斜杠(\),但是在PHP 5中magic_quotes_gpc并不会过滤$_SERVER变量,导致很多类似client-ip、referer一类的漏洞能够利用

在PHP 5.3之后的不推荐使用magic_quotes_gpc,PHP5.4之后干脆被取消。在PHP版本小于4.2.3时,配置范围是PHP_INI_ALL;在PHP版本大于4.2.3时,是PHP_INI_PERDIR

?php
echo $_GET['seay'];

在这里插入图片描述


4.magic_quotes_runtime(魔术引号自动过滤)

magic_quotes_runtime也是自动在单引号(')、双引号(")、反斜杠(\)及空字符(NULL)的前面加上反斜杠(\)。它跟magic_quotes_gpc的区别是,处理的对象不一样,magic_quotes_runtime只对从数据库或者文件中获取的数据进行过滤

很多程序员只对外部输入的数据进行过滤,却没有想过从数据库获取的数据同样也会有特殊字符存在,所以攻击者的做法是先将攻击代码写入数据库,在程序读取、使用到被污染的数据后即可触发攻击

magic_quotes_runtime在PHP 5.4之后也被取消,配置范围是PHP_INI_ALL

#文件1.txt
1'2"3\4
#文件1.php
<?php
ini_set("magic_quotes_runtime", "1");
echo file_get_contents("1.txt");

在这里插入图片描述


5.magic_quotes_sybase(魔术引号自动过滤)

magic_quotes_sybase指令用于自动过滤特殊字符,当设置为on时,它会覆盖掉magic_quotes_gpc=on的配置,也就是说,即使配置了gpc=on也是没有效果的。这个指令与gpc的共同点是处理的对象一致,即都对GET、POST、Cookie进行处理。而它们之前的区别在于处理方式不一样,magic_quotes_sybase仅仅是转义了空字符和把单引号(‘)变成了双引号(’')

它的配置范围是PHP_INI_ALL,在PHP 5.4.0中移除了该选项

?php
echo $_GET['a'];
?

在这里插入图片描述


6.safe_mode(安全模式)

安全模式是PHP内嵌的一种安全机制

safe_mode指令的配置范围为PHP_INI_SYSTEM,PHP 5.4之后被取消

这个配置会出现下面限制:

所有文件操作函数(例如unlink()、file()和include())等都会受到限制。例如,文件a.php和文件c.txt的文件所有者是用户a,文件b.txt的所有者是用户b并且与文件a.php不在属于同一个用户的文件夹中,当启用了安全模式时,使用a用户执行a.php,删除文件c.txt可成功删除,但是删除文件b.php会失败。对文件操作的include等函数也一样,如果有一些脚本文件放在非Web服务启动用户所有的目录下,需要利用include等函数来加载一些类或函数,可以使用safe_mode_include_dir指令来配置可以包含的路径

通过函数popen()、system()以及exec()等函数执行命令或程序会提示错误。如果我们需要使用一些外部脚本,可以把它们集中放在一个目录下,然后使用safe_mode_exec_dir指令指向脚本的目录


7.open_basedir PHP可访问目录

open_basedir指令用来限制PHP只能访问哪些目录,通常我们只需要设置Web文件目录即可

如果需要加载外部脚本,也需要把脚本所在目录路径加入到open_basedir指令中,多个目录以分号()分割。

使用open_basedir需要注意的一点是,指定的限制实际上是前缀,而不是目录名。例如,如果配置open_basedir=/www/a,那么目录/www/a/www/ab都是可以访问的。所以如果要将访问仅限制在指定的目录内,请用斜线结束路径名。例如设置成:open_basedir=/www/a/

该指令的配置范围在 PHP版本小于5.2.3时是PHP_INI_SYSTEM,在PHP版本大于等于5.2.3是PHP_INI_ALL


8.disable_functions(禁用函数)

在正式的生产环境中,为了更安全地运行PHP,也可以使用disable_functions指令来禁止一些敏感函数的使用。当你想用本指令禁止一些危险函数时,切记要把dl()函数也加到禁止列表,因为攻击者可以利用dl()函数来加载自定义的PHP扩展以突破disable_functions指令的限制

本指令配置范围为php.ini only。配置禁用函数时使用逗号分割函数名,例如:disable_functions=phpinfo,eval,passthru,exec,system


9.display_errors和error_reporting错误显示

display_errors表明是否显示PHP脚本内部错误的选项,在调试PHP的时候,通常都把PHP错误显示打开,但是在生产环境中,建议关闭PHP错误回显,即设置display_errors=off,以避免带来一些安全隐患

在设置display_errors=on时,还可以配置的一个指令是error_reporting,这个选项用来配置错误显示的级别,可使用数字也可使用内置常量配置

在这里插入图片描述

这两个指令的配置范围都是PHP_INI_ALL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/414387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【建议收藏】利用python基于模拟退火计算QUBO表达式(内附代码)

文章目录引言模拟退火算法模拟退火的理论过程模拟退火在优化中的应用基于python的模拟退火编码流程定义目标函数初始化状态迭代寻找最优完整代码模拟退火在求解QUBO表达式中的应用结束语引言 在计算QUBO解的过程中,通常需要利用不同的优化算法来计算其结果。 在本…

2023 年十大 API 管理趋势

作者郑玩星,API7.ai 技术工程师。 阅读原文 什么是 API?什么是 API 管理? 近期,AIGC(AI Generated Content,生成式人工智能)在各行业的应用日趋普及。AIGC 服务提供商通过 API 向外部提供其内…

18 隐私模式下面发送 http 请求不成功

前言 是这样的一个情况, 最近 我们服务存在这样的一个问题 是在登录界面, 假设我用户名 或者 密码输入错误, 能够得到真确的结果, 拿到了 正常的 http 响应, 回来 "用户名 或者 密码 不正确 " 但是 假设是在 隐私模式下面, 同样的输入, 同样的服务, 但是结果 不一…

VMware ESXi 7.0 U3l macOS Unlocker OEM BIOS (标准版和厂商定制版)

VMware ESXi 7.0 U3l macOS Unlocker & OEM BIOS (标准版和厂商定制版) 提供标准版和 Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科) 定制版镜像 请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u3-oem/,查看最新版…

C++---状态压缩dp---小国王(每日一道算法2023.4.15)

注意事项: 状压dp难度警告! 本题为"状态压缩dp—蒙德里安的梦想"的近似题,建议先阅读这篇文章并理解。 题目: 在 nn 的棋盘上放 k 个国王,国王可攻击相邻的 8 个格子,求使它们无法互相攻击的方案…

1~5年的软件测试工程师,该学习哪些知识实现涨薪20K?

工作已经8年有余,这8年里特别感谢技术管理人员的器重,以及同事的帮忙,学到了不少东西。这8年里走过一些弯路,也碰到一些难题,也受到过做为一名测试却经常为系统维护和发布当救火队员的苦恼。遂决定梳理一下自己所学的东…

华为暑期实习

前言: 多行数据需要输入的时候可以用下面的结构: while True:try:n int(input())s input().split()num []for i in s:num.append(int(i))k int(input())print(num[n-k])except:break输入两组数据: 1 8108 17 2542 4218 9064 4908 1526 …

【WLSM、FDM状态估计】电力系统状态估计研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

实验二 图像空间域频率域滤波

一.实验目的: 1. 模板运算是空间域图象增强的方法,也叫模板卷积。 (1)平滑:平滑的目的是模糊和消除噪声。平滑是用低通滤波器来完成,在空域中全是正值。 (2)锐化&…

ChatGPT实战100例 - (01) 秒出思维导图

文章目录ChatGPT实战100例 - (01) 秒出思维导图一、需求与思路1. 需求:快速的头脑风暴2. 思路:生成markdown然后转化嗯二、生成markdown语法的思维导图1. 问题2. 回答三、把markdown文本转换成思维导图1. 转换2. 下载ChatGPT实战100例 - (01) 秒出思维导…

Nature Communications|评估推进基于网络的蛋白质-蛋白质相互作用预测的社区工作

题目:Assessment of community efforts to advance network-based prediction of protein–protein interactions 文献来源:Nature Communications | (2023) 14:1582 4 代码:https://github.com/spxuw/PPI-Prediction-Project 内容&#x…

英语基础:四级431、六级没过,考研英语78分经验分享 (23考研)

前言 博主备考时的英语基础:英语四级431分, 六级没过 研究生英语二分数:78分 ps:也许这个分数段不是一些大佬的目标分数 (80),本篇文章的目的只是帮助一些英语基础差的同学,提供一些备考经验。 一、基础阶段 时间&…

AI与未来文明:人工智能能否重塑人类文化,改变社会生活?

哈喽,大家好,我是木易巷! 今天我想和大家深入探讨一个备受关注、广泛讨论的话题:人工智能(AI)及其对我们人类未来发展的影响,人工智能能否重塑人类文化,改变社会生活? 我…

JVM参数

GC参数 年轻代老年代参数SerialSerial Old-XX:UseSerialGCParallel ScavengeParallel Old-XX:UseParallelGC -XX:UseParallelOldGCParallel NewCMS-XX:UseParNewGC -XX:UseConcMarkSweepGCG1G1-XX:UseG1GCZGCZGC-XX:UseZGC jdk默认GC新生代老年代默认参数jdk8Parallel Scaven…

Ps 毛玻璃效果

哈喽,各位小伙伴!今天我们来学习一下如何制作毛玻璃效果? 复制图层 导入一张图片,Ctrlj复制一层,右键—智能对象(目的:方便后期更换图片) 画矩形 画矩形(不要描边),…

2023年提供优质客户服务的9种专家方法

随着我们进入 2023年,客户服务从未如此重要。研究表明,86%的客户会为良好的客户服务多支付高达 25%的费用。拥有最佳客户体验的客户比客户体验不佳的客户多花费 140%。 1.确保您拥有一支出色的客户服务团队 创造出色的客户体验意味着拥有合适的团队。但出…

Android 屏幕刷新机制与优化方案~

作者:阿健君 屏幕刷新机制 基本概念 刷新率:屏幕每秒刷新的次数,单位是 Hz,例如 60Hz,刷新率取决于硬件的固定参数。帧率:GPU 在一秒内绘制操作的帧数,单位是 fps。Android 采用的是 60fps&am…

小程序组件的生命周期

组件生命周期 组件的生命周期,指的是组件自身的一些函数,这些函数在特殊的时间点或遇到一些特殊的框架事件时被自动触发。 其中,最重要的生命周期是 created attached detached ,包含一个组件实例生命流程的最主要时间点。 …

(链表专题) 83. 删除排序链表中的重复元素 ——【Leetcode每日一题】

83. 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head [1,1,2] 输出:[1,2] 示例 2: 输入:he…

在线Plist文件格式转Json文件格式

Plist文件是一种用于存储应用程序配置信息的文件格式,其中包含应用程序的各种设置和数据。在过去,Plist文件通常是以 .plist 格式存储的。然而,随着时间的推移,人们开始使用 JSON 格式来存储更复杂的数据结构和数据。如果您需要将…