靶场PHP函数及漏洞防御方式

发布时间:2026/8/1 10:57:30
靶场PHP函数及漏洞防御方式 总结SQL 注入、XSS 跨站脚本攻击和文件上传中常见函数及漏洞防御SQL注入相关函数名用途使用场景mysql_connect()连接 MySQL 数据库PHP 代码中建立数据库连接DVWA、SQLi-Labs 等老靶场常见写法mysql_select_db()选择目标数据库连接后指定要操作的数据库如security、dvwa等靶场库mysql_query()执行 SQL 查询语句直接拼接用户输入执行查询是 SQL 注入漏洞的主要产生点mysql_fetch_array()从结果集获取一行数据取出查询结果并回显到页面用于 union 注入、报错注入的数据展示mysqli_connect()连接 MySQL 数据库新版扩展现代 PHP 项目推荐使用的数据库连接方式支持预处理mysqli_select_db()选择目标数据库新版扩展mysqli 扩展下切换数据库需传入连接句柄$connmysqli_query()执行 SQL 查询语句新版扩展执行普通查询若直接拼接变量仍存在注入风险mysqli_fetch_array()从结果集获取一行数据新版扩展获取查询结果用于页面展示用法与旧版类似mysqli_real_escape_string()转义 SQL 语句中的特殊字符对用户输入的单引号等特殊字符做转义字符型注入的基础防护手段XSS相关及upload相关常用函数函数作用靶场典型使用场景strtolower()字符串全部转为小写XSS Level5统一小写防止大小写绕过过滤htmlspecialchars($str, $flags, $charset)HTML 实体转义默认转义 XSS Level2/3/15前端输出编码防御 XSS 核心函数setcookie()设置 CookieXSS 靶场 Level13页面初始化 Cookiestr_replace($find, $rep, $str)全局单次字符串替换无法递归过滤XSS Level5/6/7黑名单过滤 script、on 等关键字str_ireplace()不区分大小写的字符串替换Upload-Labs 文件上传靶场清理后缀、NTFS 数据流::$DATAparse_url()解析 URL提取协议、域名、路径等URL 型 XSS校验 href 协议防御伪协议跳转in_array()判断元素是否存在于数组常用于黑白名单校验URL 协议白名单校验、文件上传后缀校验json_encode()将数据安全序列化为 JS 字符串JS 上下文场景防御 XSS优先替代直接拼接变量move_uploaded_file($tmp,$dest)将临时文件移动到目标路径所有关卡保存上传文件存在空字节截断、竞争漏洞basename()提取纯文件名清除路径../文件路径防御date()/rand()生成随机时间戳文件名随机重命名规避文件名可控风险各种漏洞的防御方式SQL 注入强制使用预处理语句Prepared Statements)(PDO 或 MySQLi)将 SQL 结构与数据分离。若无法使用预处理则使用 白名单验证 或 严格类型转换如 intval)需注意绝不直接拼接用户输入XSS跨站脚本防御1.首先输出编码 htmlspecialchars()// ENT_QUOTES 同时转义单引号、双引号最安全 htmlspecialchars($str,ENT_QUOTES,UTF-8);2.JS 上下文安全序列化json_encode()变量嵌入script标签内使用禁止直接拼接字符串3.URL 上下文校验parse_url() 协议白名单防御hrefjavascript:alert()伪协议 XSS只允许 http/https4.Cookie 安全策略设置HttpOnly禁止 JS 读取 Cookie防止 XSS 窃取会话Secure仅 HTTPS 传输 Cookie。5.CSP 内容安全策略浏览器层防御HTTP 头限制脚本来源禁止行内脚本、eval()即使存在 XSS 漏洞也难以执行6.输入过滤辅助手段不建议单独依赖黑名单过滤 script、onclick、onerror 等极易大小写 / 拼接绕过文件上传漏洞防御服务端验证多层防御文件名处理存储位置控制文件包含漏洞防御使用白名单禁用远程文件包含路径限制关闭危险伪协议输入过滤命令注入Command Injection尽量避免使用 system()、exec() 等执行系统命令的函数。若必须使用使用 escapeshellarg() 或 escapeshellcmd() 转义参数并且白名单验证输入值。