PHP审计(一)

一、php中常见的危险函数和审计要点

  危险函数(功能过于强大)

    参数是否外部可控,有没有正确的过滤。

  PHP获取外界传入参数是通过下面几个全局函数的形式,所以审计参数传入经常要和下面几个变量打交道


  PHP中危险函数有五大特性:

变量说明
$_GET数组,存放着所有通过URL参数传递的数据
$_POST数组,当HTTP POST请求的Content-Type是application/x-www-form-urlencoded或multipart/form-data的部分解析成关联数组
$_FILES数据,存放着HTTP POST上传的文件信息
$_COOKIE数组,存放着HTTP头里面cookie段内容
$_REQUEST数组,默认情况下包含了$_GET, $_POST, $_COOKIE的数据
$_SERVER数组,包含了HTTP头,服务器环境等信息
$_SESSION数组,存放当前会话可用的session变量


  参数是否可控

  执行任意代码函数

  1)把传入的字符串直接当成php代码直接执行,如:

 ABCD
1函数函数说明例子运行结果
2assert判断一个断言是否为falseassert('print(123)')输出123
3eval把一个字符串当做php代码执行eval('echo 123')输出123
4create_function用给的一个字符串创建匿名函数create_function('$a','print($a);')(123)输出123

   2)通过引入文件的形式执行php代码,如:(利用:查看这些引入文件参数是否外部可控)

 ABCD
1函数函数说明例子结果
2include包含并运行指定文件include '1.php'包含文件1.php,并执行里面的代码
3include_once包含并运行指定文件include_once '1.php'包含文件1.php,并执行里面的打码
4require包含并运行指定文件require '1.php'包含文件1.php,并执行里面的代码
5require_once包含并运行指定文件require_once '1.php'包含文件1.php,并执行里面的代码

  3)数据处理函数

 函数函数说明例子结果
1preg_replace使用正则替换内容,php7之前的正则表达式参数可以开启\e的模式,执行任意代码preg_replce("/(.)/e",'print(\1),'123');

php5下输出123

2array_map为数组的每个元素应用回调函数$b=array_map('assert',['print(123)']);php5下输出123
3array_filter用回调函数过滤数组中的单元array_filter(['print(123)'],'assert');php5下输出123
4array_walk使用用户自定义函数对数组中的每个元素做回调处理

$a=['print(123)'];array_walk($a,'assert')

php5下输出123
5call_user_func把第一个参数作为回调函数调用call_user_func('assert','print(123)');输出123
     

  4)能够读取网络资源的函数(配置  allow_url_include=1  才可以使用)

 函数函数说明例子结果
1curl系列发起网络请求  
2file_get_contents原本功能是读取文件,但是支持封装协议,所以可以读取网络上的资源file_get_contents('https://url.com')请求url.com
3file原本功能是读取文件,但是支持封装协议,所以可以读取网络上的资源file('https://url.com')请求url.com
4fopen原本功能是读取文件,但是支持封装协议,所以可以读取网络上的资源fopen('https://url.com')请求url.com
5

copy

原本功能是复制文件,但是支持封装协议,所以可以读取网络上的资源copy('https://url.com')请求url.com,并保存txt文档
     

  5)能够执行系统命令或者调用外部程序的函数

函数函数说明  例子结果
exec 执行一个外部程序exec('touch 1.txt')在当前目录下生成1.txt

shell_exec

通过shell执行命令,并且将完整的输出以字符串的方式返回shell_exec('touch 1.txt')在当前目录下生成1.txt
system执行外部程序,并显示输出system('touch 1.txt')在当前目录下生成1.txt
passthru执行外部程序,并显示输出passthru('touch 1.txt')在当前目录下生成1.txt
popen打开进程文件指针popen('touch 1.txt','r')在当前目录下生成1.txt
proc_open执行一个命令,并打开用来输入/输出的文件指针proc_open('touch 1.txt',[],$a)在当前目录下生成1.txt
``反引号包含的内容会当成系统命令执行`touch 1.txt`在当前目录下生成1.txt

  6)能够修改运行时候的上下文环境

函数函数说明例子结果
extract从数组中将变量导入到当前的符号表,审计时候需要判别传输数组是否外部可控$a='1';extract(['a'=>'2']);echo $a输出2

parse_str

将字符串解析成多个变量$a='1';parse_str('a=2');echo $a输出2
ini_set修改运行时php配置ini_set('memory_limit','2048M')设置运行时最大占用额内存为2048M

转载于:https://www.cnblogs.com/jhql/p/10056706.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值