使用说明
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许可证。参见 许可证 了解详情。
