JaydeepGadhiya/laravel-guarddog
GitHub: JaydeepGadhiya/laravel-guarddog
Laravel GuardDog 是一款轻量级的安全扫描器,专门检测 Laravel 应用中的常见漏洞并生成 HTML 报告,以提升开发安全性。
Stars: 7 | Forks: 0
# 🐕 Laravel GuardDog
### 一款用于 Laravel 的安全扫描器,可发现漏洞并生成精美的 HTML 报告。
[](https://github.com/JaydeepGadhiya/laravel-guarddog/actions)
[](https://packagist.org/packages/jaydeep/laravel-guarddog)
[](https://packagist.org/packages/jaydeep/laravel-guarddog)
[](LICENSE.md)
[](https://github.com/JaydeepGadhiya/laravel-guarddog/stargazers)
**在几秒钟内扫描你的 Laravel 应用。在进入生产环境之前,捕获 SQL 注入、缺失的认证中间件、暴露的密钥等问题。**
[快速开始](#-quick-start) • [功能](#-features) • [报告示例](#-example-report) • [配置](#-configuration) • [常见问题](#-faq)
## 🚀 为什么选择 GuardDog?
要发布一个安全的 Laravel 应用,你不必非得成为安全专家。**GuardDog** 是一款零配置的静态安全分析器,它会扫描你的代码库,找出 Laravel 开发者实际会犯的、符合 OWASP 类别的错误,并生成一份清晰、可分享的 HTML 报告,附带一个团队可以共同关注的安全评分。
- ⚡ **零配置** — 在任何 Laravel 8–13 项目上开箱即用
- 🎯 **Laravel 感知** — 理解路由、中间件、Eloquent、Blade 和 `.env`
- 📊 **精美的 HTML 报告**,附带 0–100 安全评分
- 🆓 **免费且开源** (MIT 许可)
## 📦 安装与配置
需要 PHP 7.4+ 和 Laravel 8–13。
```
composer require jaydeep/laravel-guarddog --dev
```
Laravel 会自动发现服务提供者。发布配置文件(可选):
```
php artisan vendor:publish --tag=guarddog-config
```
## ⚡ 快速开始
运行完整扫描:
```
php artisan guarddog:scan
```
就这样。GuardDog 会扫描你的项目,并将 HTML 报告写入 `public/security-report.html`。
| 命令 | 作用 |
|---|---|
| `php artisan guarddog:scan` | 完整扫描 + HTML 报告 |
| `php artisan guarddog:scan --no-html` | 仅控制台输出 |
| `php artisan guarddog:scan --output=storage/report.html` | 自定义报告路径 |
## 📸 截图
### 控制台输出

### HTML 安全报告

## 🔍 功能
GuardDog 扫描最常见的 Laravel 安全漏洞:
### 代码级检查
- 🛑 **原始 SQL 注入风险** — `DB::statement()`、`DB::raw()` 以及带变量插值的 `whereRaw()`
- 🛑 **未转义的 Blade 输出** — `{!! $userInput !!}` 会被标记为 XSS 风险
- 🛑 **批量赋值漏洞** — 模型缺少 `$fillable` 或 `$guarded`
- 🛑 **不安全的 `eval()`、`shell_exec()`、`exec()`、`system()` 用法**
### 配置检查
- ⚠️ **生产环境中 `APP_DEBUG=true`**
- ⚠️ **弱或缺失的 `APP_KEY`**
- ⚠️ **默认的数据库凭据**
- ⚠️ **`.env` 文件意外提交到 git**
- ⚠️ **Session/Cookie 安全标志** (`SESSION_SECURE_COOKIE`, `SameSite`)
### 路由与中间件
- 🚧 **路由缺少 `auth` 中间件**
- 🚧 **`VerifyCsrfToken` 中的 CSRF 排除项**
- 🚧 **过于宽松的 CORS 配置**
### 依赖项
- 📦 **存在已知 CVE 的过时包**(通过 Packagist 安全公告)
- 📦 **Composer `minimum-stability` 设置为 dev**
## 📋 报告示例
```
╔══════════════════════════════════════════════════════════╗
║ 🐕 Laravel GuardDog Security Report ║
╚══════════════════════════════════════════════════════════╝
Files scanned: 142
Issues found: 5
Security Score: 83 / 100 (Good)
● CRITICAL: 1 ● WARNING: 3 ● NOTICE: 1
──────────────────────────────────────────────────────────
CRITICAL Raw SQL with variable interpolation in DB::statement()
File: app/Repositories/UserRepository.php:54
WARNING Route without auth middleware
File: routes/web.php:23
──────────────────────────────────────────────────────────
Full HTML report: public/security-report.html
```
HTML 报告包含针对每个问题的修复指导、代码片段以及一个可分享的评分徽章。
## 🤖 持续集成
当 GuardDog 发现严重问题时,使你的 CI 构建失败:
```
# .github/workflows/security.yml
- name: Run GuardDog security scan
run: php artisan guarddog:scan --no-html --fail-on=critical
```
GitLab、CircleCI 和 Bitbucket Pipelines 的用法类似 — 只需在你的任务中调用 artisan 命令即可。
## ⚙️ 配置
发布配置文件 (`config/guarddog.php`) 后,你可以:
- **禁用**你关心的特定检查
- 设置 CI 失败的**严重性阈值**
- **排除路径**(例如 `vendor/`、`database/seeders/`)
- **自定义 HTML 报告**的标题、Logo 和主题
```
return [
'enabled_checks' => [
'sql_injection',
'unescaped_blade',
'mass_assignment',
'debug_mode',
// ...
],
'exclude_paths' => [
'database/seeders',
'database/factories',
],
'fail_on' => 'critical', // critical | warning | notice
];
```
## 📊 安全评分
GuardDog 对你的应用进行 0 到 100 的评分。每个问题会根据严重程度扣除分数:
| 严重性 | 扣分 | 示例 |
|---|---|---|
| 🔴 严重 | -15 | SQL 注入、`eval()`、生产环境调试 |
| 🟡 警告 | -5 | 缺少认证中间件、弱会话配置 |
| 🔵 注意 | -1 | 风格/最佳实践小问题 |
**80+** 分是良好。**90+** 分是优秀。**100** 分意味着 GuardDog 未发现任何问题 — 尽管没有扫描器能捕获所有漏洞,所以手动审查仍然重要。
## ❓ 常见问题
这与 enlightn/enlightn 有何不同?
Enlightn 是一个出色的、更全面的工具,涵盖安全、性能和可靠性。GuardDog 专注于**安全、轻量且零配置** — 设计用于快速集成到任何项目并运行,生成一份你可以交给非技术股东的精美报告。两者结合使用可获得最佳覆盖。
GuardDog 能替代 Roave Security Advisories 吗?
不能 — 它们互补。`roave/security-advisories` 在 Composer 层面阻止安装存在漏洞的包。GuardDog 扫描**你的应用程序代码**,查找你自己编写的漏洞。GuardDog 能捕获所有安全问题吗?
没有静态分析器可以。GuardDog 能捕获一系列常见的 Laravel 特定错误,但生产安全还需要手动代码审查、依赖扫描、渗透测试和运行时保护。将 GuardDog 视为防御层之一。它会将我的代码发送到任何地方吗?
不会。GuardDog 100% 在本地运行。没有遥测,不回传数据,不调用外部 API。我能添加自定义检查吗?
可以 — GuardDog 附带一个可扩展的检查 API。请参阅[自定义检查指南](docs/custom-checks.md)。
**由 [Jaydeep Gadhiya](https://github.com/JaydeepGadhiya) 为 Laravel & 开源社区用 ❤️ 构建**
标签:ffuf, HTML报告, Laravel安全, Laravel框架, PHP安全, SQL注入检测, Web安全, XSS检测, 二进制发布, 云安全监控, 安全扫描, 安全报告, 安全评分, 开源工具, 时序注入, 蓝队分析, 认证中间件检查, 零配置扫描, 静态分析