关于assert()函数,eval()函数,include

发布于:2025-08-05 ⋅ 阅读:(17) ⋅ 点赞:(0)

一.assert()函数

例子

assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");

assert("file_exists('$file')") or die("That file doesn't exist!");

第一个是会检验$file是否有.. ,如果有strpos会返回true,true和false不相等会返回false,最后会终止程序返回Detected hacking attempt!

assert()函数是 PHP 中的一个调试函数,用于在代码中设置断言检查。

assert中的参数要是字符串很可能会被当做php代码进行执行

二.eval()函数

eval()函数在php中会将参数中的字符串当作php代码执行。

但是开发中很少使用,他的用法很多都会被其他替代,常见的用法是我们去上传具有该函数的文件,进而去渗透。像我们在面对ssti漏洞(模板注入漏洞)中会去找子类的eval,但是这边的是python的,而不是php的,但是python中的可以仅限单个表达式,所以还要配合其他函数进行,而php中的可以任意执行。

三.include()函数

内容:include 是 PHP 中用于包含并运行指定文件的重要函数,它在动态网页开发中非常常用,但也存在一些安全风险需要注意。

include()的参数一般都是:文件名或者文件路径(url),常常利用协议去进行渗透

关系对比:

函数构造 命令执行 代码执行 PHP 5.x PHP 7.2+
assert(system()') 双重执行 仅执行命令
eval('system()') 执行命令 仅表达评估
特性 eval($_REQUEST['cmd']) include()
执行方式 直接执行字符串中的PHP代码 包含并执行指定文件内容
输入要求 需要输入完整PHP代码 需要文件路径或可解析的URI
利用复杂度 高(需构造有效PHP语法) 中(需控制文件路径或利用协议)
隐蔽性 高(无文件落地) 低(需存在可访问的恶意文件)
PHP版本影响 全版本有效 allow_url_include配置影响
特性 eval($_GET['cmd']) assert($_GET['cmd'])
执行机制 直接执行字符串中的PHP代码 在传统模式下会执行字符串代码
PHP 5.x行为 执行代码 执行代码
PHP 7.0-7.1行为 执行代码 默认执行代码(传统模式)
PHP 7.2+行为 执行代码 默认不执行代码(表达式模式)
返回值 返回执行结果 返回布尔值(断言是否成功)
设计用途 动态代码执行 调试断言
危险等级 🔴 极高风险 PHP <7.2: 🔴 极高风险
PHP ≥7.2: 🟡 中风险

网站公告

今日签到

点亮在社区的每一天
去签到