Laravel安全审计工具

Laraguard MCP是一个基于TypeScript的独立安全审计服务器,专为Laravel项目设计,提供静态代码扫描、依赖漏洞检测、配置审计等功能。

  • by ecr17dev
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 ecr17dev/Laraguard-MCP

使用说明

Laraguard MCP

Laravel项目的安全审计MCP服务器——使用TypeScript和stdio传输构建。


概述

Laraguard MCP 是一个独立的 模型上下文协议(MCP) 对Laravel项目执行安全审计的服务器。它是用纯TypeScript实现的,使用官方 @modelcontextprotocol/sdk 并通过以下方式进行通信 标准,使其与任何支持MCP的IDE或客户端(Cursor、Claude Desktop、VS Code MCP扩展等)原生兼容。

服务器将Laravel项目分析为 外部目标 --它不需要Laravel运行。它返回按严重性分类的结构化JSON结果,涵盖配置问题、风险代码模式和依赖卫生。


特性

  • 🔍 静态代码扫描 --超过15条规则,涵盖SQL注入、RCE、硬编码凭据、弱加密、大规模分配和LFI
  • 🎭 Blade XSS扫描仪 --检测未扫描 {!! !!} 模板中的输出和原始输入渲染
  • 🛣️ 路由和中间件审计 -标记不带身份验证的管理路由、不带身份证明的API路由:制裁、不带节流的登录路由和CSRF异常
  • 📦 依赖CVE提要 --查询 OSV.dev API适用于所有实际CVE composer.lock 包裹
  • ⚙️ 配置审核 --检查 .env (调试、APP_KEY、APP_ENV、安全Cookie)以及 config/cors.php
  • 🗂️ 项目元数据 --阅读 composer.json 识别Laravel和PHP版本约束
  • 💥 主动攻击模拟 --对正在运行的应用程序启动HTTP探测(SQL注入、XSS、CSRF、身份验证旁路、速率限制)
  • 🔒 路径遍历预防 --对所有文件操作严格执行allowlist
  • ✂️ 秘密编辑 --敏感值在到达MCP客户端之前在文本输出中被屏蔽
  • 🚀 stdio传输 --零配置网络;适用于任何支持MCP的IDE

MCP工具

服务器暴露 8工具。所有静态工具都接受一个 path 参数。 attack_simulate 另外需要a baseUrl.

工具 输入 描述
project_info path 从返回元数据 composer.json:项目名称、Laravel/PHP版本约束、引擎信息。
dependency_audit path 解析 composer.lock 和查询 OSV.dev 对于具有严重性和修复版本的真实CVE。
config_audit path 检查 .env (调试、APP_KEY、APP_ENV、会话Cookie)和 config/cors.php (通配符来源)。
code_scan path 所有PHP文件中有15个以上的静态模式规则——凭据、弱加密、大规模分配、RCE、LFI、SQL注入。
blade_scan path 扫描 resources/views/ 用于无缩放输出的刀片模板({!! !!})以及XSS倾向模式。
route_audit path 审核路由文件和中间件是否缺少身份验证、节流阀和CSRF异常通配符。
attack_simulate path + baseUrl 对正在运行的应用程序启动6个实时HTTP探测:SQL注入、XSS、CSRF、身份验证旁路、速率限制、错误披露。
full_audit path 跑步 dependency_audit + config_audit + code_scan + blade_scan + route_audit 同时,返回一份合并报告。

代码扫描——检测到的模式

模式 严重性 查找类型
->whereRaw( 高 SQL_INJECTION
DB::raw( 中等 RAW_SQL_USAGE
unserialize( 关键 UNSAFE_UNSERIALIZE
shell_exec( / exec( / system( / passthru( 关键 RCE_RISK
eval( 关键 EVAL_USAGE
password = 'literal' 关键 HARDCODED_PASSWORD
api_key = 'literal' 关键 HARDCODED_API_KEY
长硬编码令牌/秘密 高 HARDCODED_SECRET
md5( 高 WEAK_HASH_MD5
sha1( 中等 WEAK_HASH_SHA1
protected $guarded = [] 高 MASS_ASSIGNMENT_UNGUARDED
file_get_contents($request…) 关键 PATH_TRAVERSAL_RISK
include/require($request…) 关键 LFI_RISK

审核报告架构

每个工具都返回一个结构化的JSON报告:

{
  "summary": {
    "critical": 0,
    "high": 1,
    "medium": 2,
    "low": 0,
    "info": 1
  },
  "findings": [
    {
      "severity": "high",
      "type": "SQL_INJECTION",
      "title": "Potential SQL injection via whereRaw",
      "file": "app/Http/Controllers/UserController.php",
      "line": 42,
      "evidence": "->whereRaw('email = ' . $email)",
      "recommendation": "Avoid raw SQL with user input. Use parameter binding/query builder."
    }
  ],
  "metadata": {
    "scannedPath": "/absolute/path/to/laravel-project",
    "engine": "Laraguard MCP",
    "version": "3.0.0",
    "timestamp": "2025-01-01T00:00:00.000Z",
    "durationMs": 312
  }
}

建筑

src/
├── index.ts      — MCP server bootstrap and tool registration
├── config.ts     — Environment variable loading and validation
├── security.ts   — Path allowlist enforcement and secret redaction
├── files.ts      — Safe file enumeration and reading
├── tools.ts      — Audit tool implementations
├── reports.ts    — Report aggregation and severity summarization
└── types.ts      — Domain types (Finding, AuditReport, Severity, etc.)

运行时堆栈:

组件 技术
运行时 Node.js 20+
语言 TypeScript 5.x
协议 模型上下文协议(MCP)
运输 stdio
模式验证 Zod
MCP-SDK @modelcontextprotocol/sdk

需求

  • Node.js 20或以上
  • npm 10或更高

验证您的环境:

node -v
npm -v

安装

克隆存储库并安装依赖项:

git clone https://github.com/ecr17dev/Laraguard-MCP.git
cd "Laraguard MCP"
npm install

配置

复制示例环境文件并对其进行自定义:

cp .env.example .env

环境变量

变量 默认值 描述
MCP_BASE_PATH -- 项目扫描允许的单个根路径。
MCP_BASE_PATHS -- 以逗号分隔的允许根路径列表。 优先 超过 MCP_BASE_PATH.
MCP_MAX_FILES 5000 每次扫描可枚举的最大文件数。
MCP_MAX_FILE_SIZE_BYTES 300000 每个文件要读取的最大文件大小(以字节为单位)。
MCP_TIMEOUT_SECONDS 30 审核操作的逻辑超时。

优先级顺序: MCP_BASE_PATHS → MCP_BASE_PATH → 当前工作目录。

示例 .env

# Allow scanning two project roots
MCP_BASE_PATHS="/Users/yourname/projects/my-laravel-app,/srv/workspaces/api"

# Scan limits
MCP_MAX_FILES=5000
MCP_MAX_FILE_SIZE_BYTES=300000
MCP_TIMEOUT_SECONDS=30

发展

可用脚本

命令 描述
npm run dev 使用以下命令直接从TypeScript源运行MCP服务器 tsx (建议开发)
npm run build 将TypeScript编译为 dist/
npm run start 从运行编译后的服务器 dist/index.js
npm run check 类型检查项目而不发出输出

以开发模式运行

npm run dev

生产大楼

npm run check   # Validate types first
npm run build   # Emit to dist/
npm run start   # Run compiled output

与MCP客户端集成

通用MCP配置(JSON)

将以下内容添加到MCP客户端的配置文件中,将路径替换为安装的绝对路径:

{
  "mcpServers": {
    "laraguard": {
      "command": "node",
      "args": ["/absolute/path/to/Laraguard MCP/dist/index.js"],
      "env": {
        "MCP_BASE_PATHS": "/absolute/path/to/your-laravel-project"
      }
    }
  }
}

使用开发模式(tsx)

如果你喜欢不先构建就运行:

{
  "mcpServers": {
    "laraguard": {
      "command": "npx",
      "args": ["tsx", "/absolute/path/to/Laraguard MCP/src/index.ts"],
      "env": {
        "MCP_BASE_PATHS": "/absolute/path/to/your-laravel-project"
      }
    }
  }
}

光标IDE

打开 设置→ MCP 并粘贴上面的JSON块。Cursor将在下次重新加载时检测服务器。

克劳德桌面版

编辑 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)并添加 laraguard 进入下 mcpServers.


工具使用参考

project_info

{ "path": "/absolute/path/to/laravel-project" }

返回基本的项目元数据,而不执行任何安全检查。使用它来确认目标是一个有效的Laravel项目,并在审计前检查框架和PHP版本约束。


dependency_audit

{ "path": "/absolute/path/to/laravel-project" }

解析 composer.lock,提取所有锁定的包名称和版本,并查询 OSV.dev 批API 对于已知的CVE。每个漏洞都会以查找结果的形式返回:

  • CVE/GHSA标识符和摘要
  • 严重程度(根据CVSS评分绘制)
  • 受影响的软件包版本和建议的修复版本
  • 直接链接到咨询页面

config_audit

{ "path": "/absolute/path/to/laravel-project" }
检查 文件 严重性
APP_DEBUG=true .env 高
APP_ENV=local .env 中等
APP_KEY= (空) .env 关键
SESSION_SECURE_COOKIE=false .env 中等
通配符CORS来源('*') config/cors.php 中等

code_scan

{ "path": "/absolute/path/to/laravel-project" }

对所有PHP文件执行逐行静态分析。返回每个匹配的结果,包括文件路径、行号和证据片段。请参阅 代码扫描——检测到的模式 上表显示了完整的规则集。


blade_scan

{ "path": "/absolute/path/to/laravel-project" }

扫描全部 .blade.php 文件下 resources/views/ 对于易发生XSS的输出模式:

检查 严重性
{!! $variable !!} --未转义变量 高
{!! request( !!} / {!! old( !!} --原始用户输入 关键
echo $_GET / echo $_POST 刀片式PHP块 高

route_audit

{ "path": "/absolute/path/to/laravel-project" }

倒像 routes/web.php, routes/api.php,以及 app/Http/Middleware/VerifyCsrfToken.php:

检查 文件 严重性
无管理员/仪表板路由 auth 中间件 routes/web.php 关键
API路线,无 auth:sanctum / auth:api routes/api.php 高
登录/注册路线无 throttle 中间件 路由文件 中等
通配符模式 VerifyCsrfToken::$except VerifyCsrfToken.php 高

attack_simulate

{
  "path": "/absolute/path/to/laravel-project",
  "baseUrl": "http://localhost:8000"
}

⚠️ 仅用于本地或临时环境。永远不要违背生产。

对正在运行的应用程序启动6个实时HTTP探测:

探测 方法和终点 它测试什么
error_disclosure GET /__invalid_route__ 框架/堆栈跟踪信息泄漏
sql_injection_login POST /login 带有SQLi有效负载 登录表单中的SQL注入
reflected_xss GET /search?q=<script>… 在搜索/查询参数中反映XSS
csrf_not_enforced POST /login 没有CSRF令牌 CSRF令牌强制(需要HTTP 419)
auth_bypass GET /api/user 无身份验证头 对受保护的API的未经身份验证的访问
rate_limit 10倍快速 POST /login 暴力速率限制(预期HTTP 429)

该报告包括 probes 元数据数组,其中包含每个探测器的状态代码、持续时间和触发状态。


full_audit

{ "path": "/absolute/path/to/laravel-project" }

跑 dependency_audit, config_audit, code_scan, blade_scan,以及 route_audit 并行 并将所有调查结果合并为一份综合报告。元数据包括每节摘要。


安全设计

Laraguard MCP实施了以下控制,以确保即使在处理不受信任的项目路径时也能安全运行:

  • 严格的路径分配 --所有文件访问都经过验证 MCP_BASE_PATHS / MCP_BASE_PATH;路径遍历尝试会立即被拒绝。
  • 文件计数限制 --可配置上限(MCP_MAX_FILES)防止大型monorepos上的枚举失控。
  • 文件大小限制 --可配置上限(MCP_MAX_FILE_SIZE_BYTES)防止二进制文件或生成的文件耗尽内存。
  • 目录和扩展排除 — vendor/, node_modules/, .git/,并且从扫描中排除二进制文件类型。
  • 秘密编辑 --敏感值(密码、令牌、密钥)在返回给MCP客户端之前,会在文本输出中被屏蔽。
  • 攻击模拟警卫 — attack_simulate 始终只针对明确提供的对象 baseUrl;不进行自动发现或生产检测。

重要说明

  • Laraguard MCP分析Laravel项目 作为外部审计师 --Laravel应用程序本身不需要为静态工具运行。
  • attack_simulate 需要 要运行的应用程序不应以生产为目标。
  • 服务器是 在传输级别与框架无关:任何支持MCP stdio的客户端都可以使用它。
  • 所有发现都是信息性的。始终将自动扫描与手动代码审查和专用DAST/SAST工具(OWASP ZAP、Burp Suite)相结合,用于生产安全评估。

许可证

该项目根据 MIT许可证。参见 许可证 了解详情。