mcpField
P
php-symfony-audit

php-symfony-audit

github.com/0xsheSecurity40979 installsUpdated 31w ago
Repository

About php-symfony-audit

A PHP security-audit skill for reviewing Symfony configuration and framework-specific usage. It covers access control, CSRF, Twig output, security expressions, and HttpClient calls, with findings grounded in source evidence and observable checks.

Key features

  1. 01Review access_control and firewall settings
  2. 02Check CSRF token generation and validation
  3. 03Locate Twig raw output and escaping settings
  4. 04Assess whether security expressions are controllable
  5. 05Check URL sources for HttpClient calls
  6. 06Provide risk mapping, test plans, and fixes

Use cases

  1. 01Audit access-control rules for Symfony routes
  2. 02Check whether forms validate CSRF tokens
  3. 03Find controllable unescaped output in Twig templates
  4. 04Assess whether outbound URLs could reach internal hosts

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/0xshe/php-code-audit-skill --skill php-symfony-audit

After installing, type/php-symfony-auditin Claude Code to confirm it loaded.

Details

From the project README

PHP Symfony 框架安全审计(php-symfony-audit)

分析 Symfony 项目源码中的“框架特效安全机制”和“配置/用法踩坑”,重点覆盖:

  • config/packages/security*.yaml 的 access_control、firewalls 配置正确性
  • CSRF 防护机制(表单提交与 token 验证)
  • Twig 渲染自动转义与 raw 输出风险
  • Symfony 访问表达式与安全拦截链(map 到 AUTH/EXPR/TPL 视情况)
  • HttpClient 外联策略(SSRF 类风险以通用 SSRF 类型映射)

输入

用户提供:

  • source_path:Symfony 项目源码根目录 可选:
  • output_path:输出目录路径(默认 {source_path}_audit)

输出目录

输出到:

{output_path}/framework_audit/
  symfony_{timestamp}.md

框架识别(必做)

必须给出识别为 Symfony 的证据点(不允许空口断言):

  • 典型目录:config/、src/、templates/
  • 依赖证据:composer.json 中 symfony/framework-bundle 等
  • 入口证据:public/index.php 或类似前端控制器

风险类型映射(必做)

每条发现都必须写明:

  • 适用的通用类型码:AUTH / CSRF / CFG / XSS / TPL / LOGIC / SESS / SSRF / EXPR 等
  • 映射原因:为什么该 Symfony 风险会落在该类型码(用一句话)

必审清单(必做:逐项检查并输出结果)

1) 访问控制与鉴权策略(AUTH)

必须定位并输出:

  • security.yaml 中的 access_control 规则
  • firewalls 配置(是否 anonymous: true、是否 stateless: true 与认证方式)
  • switch_user、role_hierarchy 或 voter/policy 类配置(如存在)

判定规则:

  • 若存在过宽允许(例如过于泛化的匿名规则覆盖敏感路径),输出 AUTH 风险
  • 若存在“有认证但缺少角色/归属校验”的模式,输出 AUTH 或 LOGIC 风险
2) CSRF 防护(CSRF)

必须定位并输出:

  • Symfony CSRF 相关配置(framework: csrf_protection 或组件级配置)
  • 表单类型使用中 CSRF token 的生成与接收方式
  • token 验证失败的处理路径(是否早退、是否仅在某些分支校验)

判定规则:

  • 若存在“某些路由/表单禁用了 CSRF 或 CSRF token 接收字段不一致”,输出 CSRF 风险
3) Twig 自动转义与 raw 输出(XSS/TPL)

必须定位并输出:

  • Twig 配置:自动转义是否被关闭(全局或局部)
  • 模板中 raw 输出点:|raw、{% autoescape false %}、以及任何“绕过转义”的指令
  • 数据来源:raw 输出的变量来自哪里(request/session/数据库字段)

判定规则:

  • raw 输出变量来源可控且未做 escape,则映射到 XSS 或 TPL(若存在表达式执行/模板引擎可控)
4) 安全表达式与求值风险(EXPR/TPL/AUTH)

必须定位并输出:

  • ExpressionLanguage 用于 security 的位置(voter/policy 中 is_granted 或表达式条件)
  • 表达式字符串来源是否可能被用户控制(例如表达式拼接)

判定规则:

  • 若表达式字符串可控,按 EXPR 或 TPL 风险输出
5) 外联 HTTP 与内网访问(SSRF)

必须定位并输出(仅做框架关联检查):

  • HttpClient/KernelInterface 等外联调用的封装入口
  • URL/host 是否来源于用户输入,是否存在 allowlist 或内网拦截

可观测 PoC(必做:框架特效可观测验证框架)

至少给出以下两类其一并写清观察点:

  • 访问控制错误:用未登录/低权限用户访问疑似受保护路由,观察响应差异
  • CSRF 错误:构造表单请求缺失或伪造 CSRF token,观察状态码/错误路径

PoC 输出要求:

  • 必须包含真实路由与真实表单 action(或路由路径)
  • 必须说明预期观察点(例如是否返回 403、是否继续执行状态变更)

输出完整性检查(强制)

  • 输出包含:Symfony 识别证据点
  • AUTH/CSRF/Twig(raw)/安全表达式/HttpClient(可选) 五块均有检查结果
  • 每条风险都有:映射类型码 + 位置证据 + 可观测验证框架 + 修复建议

Comments

Markdown supported