rails-security-review について
Rails コードのセキュリティレビューや強化を行う開発者向けのスキルです。悪用可能な問題を優先し、認証・認可の指摘をレポートの先頭に置くほか、入力、出力、クエリ、シークレットのリスクを確認します。
主な機能
- 01認証・認可を先に記載するレポート順
- 02パラメーターとクエリの安全性確認
- 03リダイレクトと出力エンコードのレビュー
- 04ファイル、ネットワーク、シークレットの確認
- 05深刻度、攻撃経路、対策の形式
活用シーン
- 01Rails コードのセキュリティ問題のレビュー
- 02認可とパラメーター処理の強化
- 03具体的な攻撃経路を含む指摘の作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ midudev/ autoskills --skill rails-security-reviewインストール後、Claude Code で/rails-security-reviewを入力して読み込まれたか確認します。
同梱ファイルPITFALLS.md
詳細
Rails のセキュリティレビュー
Rails コードをセキュリティの観点からレビューまたは強化する場合に、このスキルを使用します。
基本原則: スタイルよりも悪用可能な問題を優先します。信頼できない入力は悪用される可能性があるものとして扱います。
HARD-GATE:認可に関する指摘をレポートの先頭に記載する
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、シェル、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 の文字列補間、コミット済みファイルへのシークレットの記載。
出力スタイル
HARD-GATE に従ったセクション順にします。内容がない場合もすべての見出しを記載し、「問題は見つかりませんでした。」と書きます。
## 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 対応