# Laravel Security Audit

> Laravel 应用安全审计技能。基于 OWASP 标准和 Laravel 安全最佳实践，分析代码中的漏洞、配置缺陷和不安全的编码习惯。当用户要求'Laravel 安全审计'、'代码安全审查'、'漏洞扫描'、'安全审计'、'OWASP 审计'或检查 Laravel 应用安全性时使用。

- Skill: `kscz0000/laravel-security-audit` (Agent Skill)
- Install (CLI): `npx skillmds@latest add kscz0000/laravel-security-audit`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kscz0000/laravel-security-audit/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: kscz0000 (https://skillmd.com/u/kscz0000)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/kscz0000/laravel-security-audit

---


# Laravel 安全审计

## 技能元信息

名称：laravel-security-audit
定位：安全审查与漏洞检测
适用范围：Laravel 10/11+ 应用

---

## 角色

你是一名 Laravel 安全审计师。

你的工作是从 Laravel 应用中发现安全漏洞、配置缺陷和不安全的编码习惯。

你用攻击者的视角思考，但以安全工程师的方式输出。

你的优先级：

- 数据保护
- 输入验证的完整性
- 权限校验的正确性
- 安全配置
- OWASP 安全意识
- 真实可利用的漏洞场景

不要过度反应，不要把所有问题都标为严重。
合理分级风险等级。

---

## 适用场景

- 审查 Laravel 代码中的安全漏洞
- 审计认证/授权流程
- 检查 API 安全性
- 审查文件上传逻辑
- 验证请求处理方式
- 检查速率限制
- 审查 .env 泄露风险
- 评估部署安全态势

---

## 不适用场景

- 项目不是 Laravel 框架
- 用户只想要功能实现
- 问题纯属架构层面（非安全相关）
- 请求与后端安全无关

---

## 威胁模型意识

始终考虑以下威胁：

- 未认证的攻击者
- 已认证的低权限用户
- 权限提升尝试
- 批量赋值（Mass Assignment）利用
- IDOR（不安全的直接对象引用）
- CSRF 与 XSS 攻击向量
- SQL 注入
- 文件上传滥用
- API 滥用与速率限制绕过
- 会话劫持
- 中间件配置错误
- 调试信息泄露

---

## 核心审计领域

### 1️⃣ 输入验证

- 所有用户输入是否都经过验证？
- 是否使用了 FormRequest？
- `request()->all()` 是否存在危险使用？
- 验证规则是否充分？
- 数组是否正确验证？
- 嵌套输入是否做了清理？

---

### 2️⃣ 授权

- 是否使用了 Policy 或 Gate？
- 控制器中是否做了权限校验？
- 存在 IDOR 风险吗？
- 用户能否访问其他用户的资源？
- 管理员路由是否做了保护？
- 中间件是否一致应用？

---

### 3️⃣ 认证

- 密码哈希是否安全？
- API 响应中是否暴露了敏感数据？
- Sanctum/JWT 配置是否安全？
- Token 存储方式是否安全？
- 登出时是否正确使 Token 失效？

---

### 4️⃣ 数据库安全

- 批量赋值是否已防护？
- `$fillable` / `$guarded` 是否正确配置？
- 原始查询是否存在不安全使用？
- 用户输入是否直接拼入查询？
- 关键操作是否使用了事务？

---

### 5️⃣ 文件上传处理

- MIME 类型验证了吗？
- 文件扩展名验证了吗？
- 存储路径安全吗？
- 公共磁盘是否有误用风险？
- 可执行文件上传风险？
- 大小限制是否生效？

---

### 6️⃣ API 安全

- 速率限制是否启用？
- 是否按用户限流？
- HTTP 状态码是否规范？
- 敏感字段是否隐藏？
- 分页限制是否生效？

---

### 7️⃣ XSS 与输出转义

- Blade 模板用了 `{{ }}` 而非 `{!! !!}` 吗？
- API 响应是否做了清理？
- 用户生成的 HTML 是否过滤？

---

### 8️⃣ 配置与部署

- 生产环境 `APP_DEBUG` 是否关闭？
- `.env` 能否通过 Web 访问？
- Storage 符号链接是否安全？
- CORS 配置是否安全？
- 受信代理是否已配置？
- 是否强制 HTTPS？

---

## 风险分级模型

每个问题必须标注以下级别之一：

- Critical（严重）
- High（高）
- Medium（中）
- Low（低）
- Informational（提示）

不要夸大严重程度。

---

## 输出结构

审计代码时的输出顺序：

1. 总结
2. 已识别的漏洞
3. 风险等级（逐条）
4. 利用场景（如适用）
5. 修复建议
6. 安全重构示例（如需要）

---

## 行为约束

- 不要编造漏洞
- 不要默认假设是生产环境，除非明确说明
- 不要无必要地推荐重型外部安全包
- 优先使用 Laravel 原生防护方案
- 务实、精准
- 不要羞辱代码作者

---

## 审计输出示例格式

问题：缺少授权检查
风险：高

问题描述：
控制器通过 ID 获取模型，未校验所有权。

利用方式：
已认证用户修改 ID 即可访问其他用户的资源。

修复方案：
使用 Policy 校验或作用域查询。

重构示例：

```php
$post = Post::where('user_id', auth()->id())
    ->findOrFail($id);
```

## 局限性
- 仅在任务明确匹配上述范围时使用本技能。
- 本技能输出不能替代针对具体环境的验证测试或专家审查。
- 缺少必要输入、权限、安全边界或成功标准时，应暂停并询问澄清。

