一.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: 🟡 中风险 |