php-frontend-audit

$npx mdskill add wgpsec/AboutSecurity/php-frontend-audit

Audit PHP frontend vulnerabilities by analyzing source code.

  • Detects XSS, CSRF, open redirect, CRLF, and session flaws.
  • Requires php-audit-pipeline data flow evidence for analysis.
  • Validates unsafe user data output in HTTP responses.
  • Returns vulnerability patterns with severity ratings.

SKILL.md

.github/skills/php-frontend-auditView on GitHub ↗
---
name: php-frontend-audit
description: |
  PHP 源码前端交互类漏洞审计。当在 PHP 白盒审计中需要检测前端安全相关漏洞时触发。
  覆盖 5 类前端风险: XSS(反射/存储/DOM)、CSRF(Token 验证缺失)、
  开放重定向(header Location 可控)、CRLF 注入(HTTP 响应拆分)、会话与 Cookie 安全(固定/劫持/属性)。
  需要 php-audit-pipeline 提供的数据流证据。
metadata:
  tags: xss, csrf, open redirect, crlf injection, session, cookie, 跨站脚本, 跨站请求伪造, 会话安全, http response splitting, 前端安全审计
  category: code-audit
---

# PHP 前端交互类漏洞源码审计
本 skill 聚焦源码层面判断"前端安全漏洞是否成立",核心是验证用户可控数据在 HTTP 响应中的输出是否安全。构造 payload、绕 WAF 等运行时利用技术属于对应黑盒 exploit skill 范畴。

## 深入参考

- 5 类前端漏洞的危险模式 / 安全模式代码对比 / EVID 证据示例 → [references/frontend-patterns.md](references/frontend-patterns.md)

---

## 5 类前端漏洞速查表

| 类型 | 典型 Sink | 触发条件 | 严重度 |
|------|-----------|----------|--------|
| XSS (反射/存储/DOM) | `echo`, `print`, 模板输出 `{!! !!}` | 用户输入未转义输出到 HTML 上下文 | High-Critical |
| CSRF | 状态变更表单/API | 缺少 Token 校验且无 SameSite 保护 | Medium-High |
| 开放重定向 | `header("Location:")`, 框架 `redirect()` | 重定向目标 URL 用户完全可控 | Medium |
| CRLF 注入 | `header()`, `setcookie()` | 用户输入含 `\r\n` 进入 HTTP 响应头 | Medium-High |
| 会话安全 | `session_start()`, `setcookie()` | session 固定/Cookie 属性缺失 | Medium-High |

## XSS 审计要点

- **输出上下文决定转义需求**: HTML body、属性、JavaScript 字符串、URL 各需要不同的转义策略,单一 `htmlspecialchars` 不能覆盖所有场景
- **htmlspecialchars 检查**: 确认使用了 `ENT_QUOTES` flag(默认 `ENT_COMPAT` 不转义单引号)和正确的编码参数(`'UTF-8'`)
- **模板引擎自动转义**: Blade `{{ }}` 自动转义但 `{!! !!}` 不转义;Twig `{{ }}` 自动转义但 `|raw` 过滤器跳过;Smarty 取决于 `$escape_html` 配置
- **存储型 vs 反射型**: 存储型需跨越存储边界追踪——数据入库时是否过滤不重要,关键看输出时是否转义
- **DOM XSS**: PHP 后端输出 JSON 到 `<script>` 标签或 HTML data 属性,前端 JS 取出后写入 DOM(`innerHTML`/`document.write`)

## CSRF 审计要点

- **状态变更操作识别**: 所有 POST/PUT/DELETE 请求中修改数据的操作都应有 Token 验证
- **框架中间件例外**: Laravel `VerifyCsrfToken` 的 `$except` 数组、ThinkPHP 的 `token_on` 配置——被排除的路由是高风险目标
- **SameSite 属性**: `SameSite=Lax` 可防御大多数 CSRF(但不防 GET 型),`None` 无保护,缺省值因浏览器而异
- **自定义 Token 实现**: 检查 Token 是否绑定 Session、是否一次性消费、是否有时效限制

## 开放重定向审计要点

- **header Location 可控**: `header("Location: " . $_GET['url'])` 是经典模式,也包括框架的 `redirect($url)`
- **parse_url 绕过**: `//evil.com`(协议相对 URL)、`///evil.com`、`\evil.com`(IE 兼容)、`javascript:` 伪协议都能绕过简单校验
- **安全白名单**: 正确实现是解析 host 后对比允许域名列表,而非正则匹配或前缀检查(`example.com.evil.com` 绕过前缀)

## CRLF 审计要点

- **header() + 用户输入**: `header("X-Custom: " . $input)` 中 `$input` 含 `\r\n` 可注入额外响应头
- **PHP 版本差异**: PHP 7.0+ 的 `header()` 已检测 `\r\n` 并抛 warning(但 `setcookie()` 到 PHP 8.x 才完善防护)
- **利用方式**: 注入 `Set-Cookie` 头实现 Session 固定、注入空行后写 Body 实现 XSS

## 会话安全审计要点

- **session_regenerate_id 时机**: 登录成功后应调用此函数防止会话固定。参数 `true` 删除旧 Session 文件
- **Cookie 属性**: `session.cookie_httponly=1`(防 JS 读取)、`session.cookie_secure=1`(仅 HTTPS)、`session.cookie_samesite=Lax`
- **自定义 Session Handler**: 实现 `SessionHandlerInterface` 时,`read()`/`write()` 是否有注入风险(如存储在 DB 时的 SQL 拼接)

## 检测清单

- [ ] 所有前端类 EVID_* 证据点已逐一审查
- [ ] echo/print 输出点的上下文类型已标注,转义方式与上下文匹配
- [ ] 模板引擎的自动转义是否被关闭已检查
- [ ] 状态变更路由的 CSRF Token 验证已确认,例外路由已标记
- [ ] header() 和 redirect() 的目标参数来源已追踪
- [ ] CRLF 注入对 PHP 版本与受影响函数已交叉确认
- [ ] Session 配置(php.ini / 代码 ini_set)已审计
- [ ] Cookie 四属性(httponly/secure/samesite/path)已逐项检查
- [ ] 严重度评分使用了统一公式,与 pipeline 一致

More from wgpsec/AboutSecurity

SkillDescription
401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
agent-security|
ai-data-security|