php函数

XSS-Labs

函数 含义 关卡作用
echo 输出到页面 所有的输出点,未经 htmlspecialchars 即产生 XSS
htmlspecialchars() 转义 HTML 特殊字符 应用则安全,未应用则存在 XSS(L1 无此函数)
str_replace() 字符串替换(黑名单过滤) L5-L7 用其过滤 <script>,可双写/大小写绕过
str_ireplace() 大小写不敏感的替换 同上,替换后仍可双写绕过
strtolower() 转小写后过滤 L6 配合过滤,需大小写混合绕过或换标签
preg_match() 正则匹配检测 用于检测协议(javascript:)、http 字符串
preg_replace() 正则替换 str_replace 更强,需注意模式绕过
strpos() / stripos() 查找字符串位置 L9 用 strpos 检测是否包含 http://
substr() 截取字符串 用于截取部分输入做比较
isset() / empty() 检测变量是否存在/为空 判断参数是否提交,大部分关卡入口

Upload-Labs

函数 含义 关卡作用
uniqid() / md5() / time() 生成随机/哈希文件名 使文件名不可预测,需结合解析漏洞
move_uploaded_file() 移动临时文件到目标路径 文件最终落地的关键函数
pathinfo() 取文件扩展名 黑白名单判断扩展名的核心函数
explode() + end() 分割字符串取最后一个元素 取扩展名的替代方案
strrchr() 从最后一个 . 开始截取 取扩展名的另一种方式
strtolower() 转小写后比对 配合扩展名黑/白名单,防止大小写绕过
in_array() 数组中是否存在 白名单/黑名单判定的核心函数
str_replace() 字符串替换过滤 过滤危险后缀如 php,可双写绕过
substr() 截取字符串 截取文件名或扩展名做检查
strrpos() 找最后一次出现位置 定位 . 位置取扩展名
getimagesize() 取图片尺寸信息 检测文件是否为真实图片(内容检查)
exif_imagetype() 取图像类型常量 getimagesize,更轻量
finfo_file() 检测文件真实 MIME 类型 根据文件字节判断类型,难以伪造
rename() 重命名文件 1.php 变为 1.php.jpg 时需重新命名
file_exists() 检查文件是否存在 判断文件是否已存在或上传成功
str_contains() / stristr() 检查字符串包含关系 检测文件名中是否含 php 等关键词

File Inclusion

函数 含义 靶场作用
include() / include_once() 包含并执行文件(失败警告,继续执行) DVWA fi 核心,直接包含用户控制的 page 参数
require() / require_once() 包含并执行文件(失败致命错误) 同 include,但失败时程序终止
file_get_contents() 读取文件内容到字符串 LFI 读取本地敏感文件 / RFI 获取远程内容
fopen() + fread() + fclose() 打开/读取/关闭文件 配合 LFI 读取任意文件
readfile() 读取并直接输出文件内容 无中间变量的文件读取输出
file() 读取文件到数组(每行一个元素) 文件内容逐行处理
basename() 返回路径中的文件名部分 DVWA impossible 级取纯文件名,防路径穿越
realpath() 返回规范化的绝对路径 防御 ../ 路径遍历攻击
dirname() 返回目录名 路径拼接操作
fnmatch() 通配符模式匹配文件名 DVWA high 级用 fnmatch("file*", $file) 做白名单
preg_match() 正则匹配 检测参数是否包含 ../http:// 等危险字符
str_replace() 替换字符串 DVWA medium 级清除 ../..\\http://https://
allow_url_include php.ini 配置项(非函数) 决定是否允许远程文件包含(RFI 开关)

命令执行

函数 含义 靶场作用
system() 执行外部命令并输出结果 DVWA exec 模块核心函数
exec() 执行外部命令,返回最后一行 命令执行核心函数,不直接输出
shell_exec() 通过 shell 执行命令,返回完整输出 反引号 ````` 的等价写法
passthru() 执行外部命令,直接输出原始结果 输出二进制数据(如图片流)
popen() 打开进程文件指针(单向管道) 通过文件句柄方式执行命令
proc_open() 更精细的进程控制 高级命令执行,可控制 stdin/stdout/stderr
escapeshellcmd() 转义 shell 元字符 #&; `等 防御:阻止特殊字符,但不阻止多参数注入
escapeshellarg() 转义参数并用单引号包裹 防御:更安全的参数转义,整个参数视为一个单词
eval() 将字符串作为 PHP 代码执行 代码执行核心函数,可直接执行任意 PHP
assert() 断言(PHP < 7.3 可执行代码) 旧版 PHP 中 assert('phpinfo()') 可执行
call_user_func() 调用第一个参数指定的回调函数 动态函数调用,可调用 systemassert
call_user_func_array() 带参数数组的回调函数调用 同 call_user_func,参数以数组形式传入
create_function() 创建匿名函数(PHP < 8.0) 字符串拼接构造函数体,存在代码注入
preg_replace() + /e 修饰符 正则替换时执行代码(PHP < 7.0) /e 修饰符将替换内容作为代码执行
array_map() / array_filter() 回调函数遍历数组 配合 call_user_func 风格动态调用
str_replace() / str_ireplace() 字符串替换过滤 命令注入黑名单过滤 `
preg_match() 正则匹配 检测参数中是否包含命令连接符
相关推荐
AI砖家1 小时前
多商户多租户系统架构设计文档(Java版)
java·开发语言·系统架构·多租户·多商户
鱼子星_2 小时前
【C++】深入剖析list:list及其双向迭代器实现
开发语言·数据结构·c++·笔记·stl·list
脚踏实地皮皮晨2 小时前
003002004_WPF Panel 基类 官方类定义
开发语言·windows·算法·c#·wpf·visual studio
520拼好饭被践踏2 小时前
JAVA+Agent学习day25
java·开发语言·学习
大黄说说2 小时前
Java 并发大坑:volatile、synchronized、Lock 三者如何选择?
java·开发语言
魏码不凡2 小时前
CURL报错:未找到SSL证书文件问题
开发语言·php·ssl
geovindu3 小时前
go:loghelper
开发语言·后端·golang
听雨入夜3 小时前
zero.zhang
开发语言·python
江屿风3 小时前
【C++笔记】【二叉搜索树】流食般投喂
开发语言·数据结构·c++·笔记