关于 rails-security-review
rails-security-review 是用于审查和加固 Rails 代码的安全技能,面向评估应用安全的开发者。它优先检查可利用的授权与输入处理问题,并规定发现项顺序和报告格式。
主要功能
- 01优先审查身份验证与授权
- 02检查不安全参数和查询
- 03审查重定向、输出、文件与密钥
- 04要求提供具体攻击场景
- 05按严重程度给出修复报告
适用场景
- 01审查 Rails 代码变更中的安全缺陷
- 02检查敏感操作的授权边界
- 03核查参数过滤与 SQL 安全
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ igmarin/ rails-agent-skills --skill rails-security-review安装后在 Claude Code 中输入/rails-security-review确认已加载。
附带文件PITFALLS.md
详细介绍
Rails 安全审查
当任务是从安全角度审查或加固 Rails 代码时,使用此技能。
核心原则: 优先关注可利用的问题,而非代码风格。假设任何不可信输入都可能被滥用。
硬性门槛:授权问题优先列入报告
BEFORE returning your security review, verify:
1. The FIRST finding section in your output is "Authentication & Authorization"
2. SQL injection, XSS, or other findings come AFTER auth/authz — even if
they feel more severe or were discovered first
3. If no auth/authz issue exists, the report still opens with an explicit
"Authentication & Authorization: no issues found" line BEFORE any other
finding category
快速参考
| 领域 | 关键检查项 |
|---|---|
| 身份验证 | 每项敏感操作都具备权限检查 |
| 参数 | 不使用 permit!,仅允许安全属性 |
| 查询 | 使用参数化查询——SQL 中不进行字符串插值 |
| 重定向 | 限制为相对路径或允许列表 |
| 输出 | 不对用户内容使用 html_safe/raw |
| 密钥 | 凭据须加密,绝不写入代码或日志 |
| 文件 | 验证文件名、内容类型和目标位置 |
审查顺序
- 检查身份验证和授权边界。
- 检查参数处理和敏感属性赋值。
- 检查重定向、渲染和输出编码。
- 检查文件处理、网络调用和后台作业输入。
- 检查密钥、日志记录和运行环境中的暴露风险。
- 核实每项发现: 在报告前,通过具体攻击场景确认问题可被利用。排除误报(例如,对开发者定义的常量而非用户输入使用
html_safe)。
严重性级别
高
- 缺少或可绕过的授权检查
- SQL、shell、YAML 或常量化注入路径
- 不安全的重定向或可能导致 SSRF 的出站请求
- 文件上传处理盲目信任文件名、内容类型或目标位置
- 密钥或令牌存储在代码、日志或不安全配置中
中
- 参数过滤薄弱,导致未限定范围的批量赋值
- 渲染用户控制的 HTML,且未明确进行清理
- 以明文记录敏感数据
- 安全相关行为隐藏在缺少防护措施的回调或后台作业中
- 脆弱的自定义身份验证逻辑;使用框架原语会更安全
审查清单
- 每项敏感操作是否都强制执行权限检查?
- 不可信输入在用于数据库、文件系统或网络之前是否经过验证?
- 重定向和 URL 是否受到限制?
- 密钥是否安全存储和记录?
- 安全假设是否明确且可测试?
示例
高严重性(未限定范围的重定向):
# Bad: user-controlled redirect — open redirect / phishing risk
redirect_to params[:return_to]
# Good: relative path only
redirect_to root_path
# Good: allowlist
SAFE_PATHS = %w[/dashboard /settings].freeze
redirect_to(SAFE_PATHS.include?(params[:return_to]) ? params[:return_to] : root_path)
中严重性(批量赋值):
# Bad: privilege escalation risk
params.require(:user).permit!
# Good: explicit whitelist — never include role, admin, or privilege fields
params.require(:user).permit(:name, :email)
易犯问题
完整列表见 PITFALLS.md。关键反模式:对任何参数集使用 permit!、对用户内容使用 html_safe、SQL 字符串插值、将密钥提交到文件中。
输出风格
各部分按硬性门槛规定的顺序排列。每个标题都必须出现,即使内容为空(写“未发现问题。”)。
## Authentication & Authorization
## Parameter Handling & Mass Assignment
## Query Safety (SQL / NoSQL / shell injection)
## Output Encoding & Redirects
## Secrets, Logging & Operational Exposure
每项发现都包含:
- 严重性: 高或中(不使用“严重”)
- 攻击路径: 输入 → 到达路径 → 影响
- 受影响文件: 路径 + 行号,例如
app/controllers/documents_controller.rb:42 - 缓解措施: 最小且可信的修复方案
集成
| 技能 | 串联使用时机 |
|---|---|
| rails-code-review | 进行涵盖非安全问题的完整代码审查时 |
| rails-architecture-review | 安全问题源于架构问题时 |
| rails-migration-safety | 审查迁移安全性(数据暴露、约束)时 |
评论
支持 Markdown