jpskill.com
🛠️ 開発・MCP コミュニティ

php-auth-audit

PHP Webソースコードから認証・認可の実装を特定し、セキュリティリスクを分析して、脆弱性や修正案を提示するSkill。

📜 元の英語説明(参考)

PHP Web 源码鉴权机制审计工具。从源码中识别所有认证/鉴权实现并分析风险,输出路由-鉴权映射与漏洞分析(含 PoC 与修复建议)。

🇯🇵 日本人クリエイター向け解説

一言でいうと

PHP Webソースコードから認証・認可の実装を特定し、セキュリティリスクを分析して、脆弱性や修正案を提示するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o php-auth-audit.zip https://jpskill.com/download/5996.zip && unzip -o php-auth-audit.zip && rm php-auth-audit.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/5996.zip -OutFile "$d\php-auth-audit.zip"; Expand-Archive "$d\php-auth-audit.zip" -DestinationPath $d -Force; ri "$d\php-auth-audit.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して php-auth-audit.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → php-auth-audit フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[スキル名] php-auth-audit

PHP 認証メカニズム監査(Auth Audit)

PHP Web プロジェクトのソースコードを分析し、認証および認可の経路を特定し、各ルートの認証状態を判断し、認証バイパス/権限昇格/IDOR のリスクを検出します。

CRITICAL:完全な分析(必須)

  • php-route-mapper に出現するすべてのルートを処理する必要があります。
  • 認証チェーン(Session/JWT/ミドルウェア/カスタム検証関数)を特定する必要があります。
  • ルートと認証のマッピングテーブルを出力する必要があります(省略なし)。
  • すべての疑わしい点について、以下の情報を提供する必要があります:位置の証拠 + データフローチェーン + 悪用可能性分析 + 検証 PoC + 修正提案。

実行モード(必須:パイプラインフェーズと整合)

このスキルは、"trace が生成される前に EVID_* を参照できない"という問題を解決するために、2つのモードをサポートしています。

  1. STATIC_MAPPING(パイプラインフェーズ 1 で推奨)

    • auth_mapping_{timestamp}.md のみを生成します(およびオプションで auth_README_{timestamp}.md)。
    • php-route-tracerEVID_* 証拠点参照が欠落していても構いません。
    • 認証状態の分類(✅/⚠️/❌/❓)と P0/P1 バケットの根拠(PoC は不要)を提供する必要があります。
  2. TRACE_AUDIT(パイプラインフェーズ 4 で推奨、trace が既に存在する場合)

    • 完全な auth_audit_report_{timestamp}.md を生成し、trace 契約の EVID_* 証拠点を強制的に個別に参照します。
    • PoC/修正提案はすべて揃っている必要があります。

脆弱性分類

詳細は shared/SEVERITY_RATING.md を参照してください。

入力依存

推奨される入力(shared/IO_PATH_CONVENTION.md と一致;パイプラインを統合する際は、総レポートの同等セクションを読み込みます):

  • routes_{timestamp}.md(独立してディスクに保存される場合は通常 route_mapping/routes_{timestamp}.md
  • params_{timestamp}.md(独立してディスクに保存される場合は通常 route_mapping/params_{timestamp}.md

オプション:

  • source_path

認証実装の特定(必須)

フレームワークごとに特定します:

  • Laravel:
    • middleware('auth'|'can'|'role:')
    • Auth::check()/Auth::user()
    • Policies/Gates:Gate::allows->can({value})
    • ルート保護:Route::middleware([{value}])->group({value})
  • Symfony:
    • security.yaml / access_control
    • denyAccessUnlessGrantedisGranted
    • voter/policy
  • ネイティブ PHP:
    • session_start + $_SESSION 判断
    • if (!isset($_SESSION['user']))/requireLogin()
    • カスタム関数:checkAuth/authorize/hasRole/isAdmin

ルートと認証のマッピング(必須)

各ルートについて、以下の状態を出力します:

  • ✅ 公開:明示的に許可されており、認証チェックなし
  • ✅ 保護済み:完全な認証/認可チェックが存在
  • ⚠️ 認証のみ:ログイン状態のみを検証し、ロール/リソースレベルの認可なし
  • ❌ 認証なし:認証経路が一切ヒットしない
  • ❓ 不明:動的な権限/複雑なカスタムロジックにより判断が困難(それでも証拠点を記述する必要があります)

また、リスクタイプとして AUTH を出力します。これには以下が含まれます:

  • 認証バイパス(ログイン状態の検証がバイパスされる)
  • 認可バイパス/権限昇格(ロール検証の欠落または誤り)
  • IDOR(オブジェクトアクセスにおける所有権/帰属検証の欠落)

疑わしいパターンの検出(必須、証拠チェーンを提供)

1) パス/URI の不一致による認証バイパス

PHP での一般的な根本原因:

  • 元の $_SERVER['REQUEST_URI'] または parse_url の結果を使用してホワイトリストマッチングを行うが、パスが正規化されていない
  • エンコーディング/大文字小文字/重複スラッシュ/末尾文字の違いによりマッチングが失敗する(実際のルートは保護されたハンドラに入る)

出力必須:

  • ホワイトリストチェックの位置とコードスニペット
  • バイパスリクエスト(PoC)とヒットしたハンドラの証拠

2) ログイン状態のみを検証し、ロール/リソース認可が欠落している

出力必須:

  • ルートの「認証チェック」位置
  • 「認可チェックの欠落」位置(例:user!=null の判断後に直接機密操作を実行する場合)

3) IDOR/権限昇格

出力必須:

  • 機密オブジェクト ID の取得元(GET/POST/URL)
  • クエリ/更新に使用される「帰属検証」の有無(WHERE 句に user_id/owner_id が含まれているか)
  • 未検証の理由と到達可能性

レポート出力(実行モード別)

出力先:

{output_path}/auth_audit/
├── auth_audit_report_{timestamp}.md
├── auth_mapping_{timestamp}.md
└── auth_README_{timestamp}.md

強制ルール:

  • STATIC_MAPPINGauth_mapping_{timestamp}.md を生成する必要があります。auth_audit_report_{timestamp}.md は省略するか、空のシェルを生成できます(その場合、「バケットマッピングのみ、trace 証拠なし」と明記します)。
  • TRACE_AUDIT:完全な3つのファイルを生成する必要があり、trace 証拠点がすべて揃っている必要があります。

ファイル1:メインレポート auth_audit_report_{timestamp}.md

内容:

  • 認証フレームワークの特定(バージョン/実装の証拠を含む)
  • 認証アーキテクチャの概要(ミドルウェア/関数/ハンドラ)
  • リスク統計
  • 各リスクの完全な脆弱性構造(番号/分類/データフロー/PoC/修正)

ファイル2:マッピングテーブル auth_mapping_{timestamp}.md

ルートと認証状態、必要なロール/条件のみをリストします(脆弱性の詳細な分析は含めません)。 ただし、バケットフィールドを新たに追加する必要があります(パイプラインフェーズ 3 でのルーティング選択用):

  • p_bucketP0 または P1
    • P0:❌ 認証なし
    • P1:⚠️ 認証のみ、または認証バイパス/権限昇格/IDOR リスクが検出された場合(認証状態が「認証のみ」と表示されていても、p1_reason で P1 に分類された理由を説明する必要があります)
  • p1_reason:短い静的根拠(例:「ログイン状態のみ、hasRole/authorize が欠落しているか、owner_id 検証が欠落している」)

ファイル3:説明ドキュメント auth_README_{timestamp}.md

方法論、ツール、検証ガイドラインのみを説明し、具体的な脆弱性の詳細は含みません。

PoC 検証テンプレート(必須)

少なくとも以下のシナリオを区別する必要があります:

  • 未ログインアクセス(cookie/session/JWT なし)
  • 一般ユーザーアクセス(一般アカウントの cookie/JWT)
  • 管理者/高権限との比較(該当する場合)

PoC は実行可能な HTTP リクエストコードブロックである必要があり、ルートパスは実際のルーティングルールを使用する必要があります。

証拠参照(実行モード別必須)

  • STATIC_MAPPING:trace の EVID_* 証拠点の参照は強制されません(認証分類と P0/P1 バケットの根拠のみを出力します)。
  • TRACE_AUDIT:各認証リスクの疑いについて、trace 出力からの証拠を個別に参照する必要があります(状態を「検証待ち」とマークすることは許可されますが、証拠参照は存在する必要があります):
  1. EVID_AUTH_PATH_PROTECTED_MATCH:ルートが保護されたハンドラに入るパスマッチングの証拠(trace の分岐パス証拠に対応)
  2. EVID_AUTH_TOKEN_DECODE_JUDGMENT:ログイン状態/トークンデコード結果がどのように判断されたかの証拠(trace の session/JWT 読み取りと条件分岐に対応)
  3. EVID_AUTH_PERMISSION_CHECK_EXEC:権限判断関数または条件文(例:hasRole/authorize)の実行証拠(trace シンク特定または分岐証拠)
  4. EVID_AUTH_IDOR_OWNERSHIP_CONDITION:IDOR 帰属検証(WHERE/条件)に owner_id/user_id が含まれているかの証拠(trace の最終クエリ条件または状態更新文)

tracer 証拠欠落の処理(必須)

  • STATIC_MAPPING:適用されません(バケットの根拠は静的コードの証拠に基づきます)。
  • TRACE_AUDIT:trace 契約の検証が失敗した場合、または 1~4 のいずれかの重要な証拠点を特定できない場合:そのリスクは ⚠️検証待ち とマークされるだけであり、✅悪用可能と確認済み または「バイパス可能と確定」という結論を出すことはできません。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

PHP 鉴权机制审计(Auth Audit)

分析 PHP Web 项目源码,识别认证与授权链路,判断每条路由的鉴权状态,并检测鉴权绕过/越权/IDOR 风险。

CRITICAL:完整分析(强制)

  • 必须处理所有在 php-route-mapper 中出现的路由
  • 必须识别认证链:Session/JWT/中间件/自定义校验函数
  • 必须输出路由-鉴权映射表(不做省略)
  • 对所有可疑点给出:位置证据 + 数据流链 + 可利用性分析 + 验证 PoC + 修复建议

运行模式(强制:与流水线阶段对齐)

此技能支持两种模式,用于解决“尚未生成 trace 之前无法引用 EVID_*”的问题:

  1. STATIC_MAPPING(推荐用于流水线阶段 1)

    • 只生成 auth_mapping_{timestamp}.md(以及可选的 auth_README_{timestamp}.md
    • 允许缺少 php-route-tracerEVID_* 证据点引用
    • 必须给出:鉴权状态分级(✅/⚠️/❌/❓)与 P0/P1 分桶依据(不需要 PoC)
  2. TRACE_AUDIT(推荐用于流水线阶段 4,trace 已存在)

    • 生成完整的 auth_audit_report_{timestamp}.md,并强制逐条引用 trace 契约中的 EVID_* 证据点
    • PoC/修复建议必须齐全

漏洞分级

详见:shared/SEVERITY_RATING.md

输入依赖

建议输入(与 shared/IO_PATH_CONVENTION.md 一致;合并流水线时读总报告中等价章节):

  • routes_{timestamp}.md(独立落盘时常为 route_mapping/routes_{timestamp}.md
  • params_{timestamp}.md(独立落盘时常为 route_mapping/params_{timestamp}.md

可选:

  • source_path

识别鉴权实现(必做)

按框架识别:

  • Laravel:
    • middleware('auth'|'can'|'role:')
    • Auth::check()/Auth::user()
    • Policies/Gates:Gate::allows->can({value})
    • 路由保护:Route::middleware([{value}])->group({value})
  • Symfony:
    • security.yaml / access_control
    • denyAccessUnlessGrantedisGranted
    • voter/policy
  • 原生 PHP:
    • session_start + $_SESSION 判断
    • if (!isset($_SESSION['user']))/requireLogin()
    • 自定义函数:checkAuth/authorize/hasRole/isAdmin

路由-鉴权映射(必做)

对每条路由输出以下状态:

  • ✅ 公开:显式允许,无鉴权检查
  • ✅ 受保护:存在完整认证/授权检查
  • ⚠️ 仅认证:只校验登录态,无角色/资源级授权
  • ❌ 无鉴权:没有任何鉴权链路命中
  • ❓ 不确定:动态权限/复杂自定义逻辑导致难判(仍必须写出证据点)

并输出风险类型:AUTH,包括:

  • 认证绕过(登录态校验被绕过)
  • 授权绕过/越权(角色校验缺失或错误)
  • IDOR(对象访问缺少所有权/归属校验)

可疑模式检测(必做,给出证据链)

1) 路径/URI 匹配导致鉴权绕过

在 PHP 中常见根因:

  • 用原始 $_SERVER['REQUEST_URI']parse_url 结果做白名单匹配,但路径未规范化
  • 编码/大小写/重复斜杠/尾部字符差异导致匹配失败(实际路由进入受保护 handler)

必须输出:

  • 白名单检查位置与代码片段
  • 绕过请求(PoC)与命中的 handler 证据

2) 仅校验登录态,缺少角色/资源授权

必须输出:

  • 路由的“认证检查”位置
  • “授权检查缺失”位置(例如只判断 user!=null 后直接执行敏感操作)

3) IDOR/越权

必须输出:

  • 敏感对象 id 来自哪里(GET/POST/URL)
  • 用于查询/更新的“归属校验”是否存在(WHERE 里是否包含 user_id/owner_id)
  • 未校验的原因与可达性

报告输出(按运行模式)

输出到:

{output_path}/auth_audit/
├── auth_audit_report_{timestamp}.md
├── auth_mapping_{timestamp}.md
└── auth_README_{timestamp}.md

强制规则:

  • STATIC_MAPPING:必须生成 auth_mapping_{timestamp}.mdauth_audit_report_{timestamp}.md 可以省略或生成空壳(并标注:仅分桶映射,不含 trace 证据)
  • TRACE_AUDIT:必须生成完整三文件,并要求 trace 证据点齐全

文件1:主报告 auth_audit_report_{timestamp}.md

包含:

  • 鉴权框架识别(含版本/实现证据)
  • 鉴权架构概览(middleware/函数/handler)
  • 风险统计
  • 每条风险的完整漏洞结构(编号/分级/数据流/PoC/修复)

文件2:映射表 auth_mapping_{timestamp}.md

只列路由与鉴权状态、所需角色/条件(不要放漏洞详细分析)。 但必须新增分桶字段(用于流水线阶段 3 选路):

  • p_bucketP0P1
    • P0:❌ 无鉴权
    • P1:⚠️ 仅认证,或检测到存在授权绕过/越权/IDOR 风险(即使鉴权状态显示为“仅认证”,也要在 p1_reason 里说明为什么进入 P1)
  • p1_reason:一段简短静态依据(如“仅登录态,缺少 hasRole/authorize 或缺少 owner_id 校验”)

文件3:说明文档 auth_README_{timestamp}.md

只说明方法论、工具与验证指南,不包含具体漏洞细节。

PoC 验证模板(强制)

必须区分至少以下场景:

  • 未登录访问(无 cookie/session/JWT)
  • 普通用户访问(普通账号 cookie/JWT)
  • 管理员/高权限对照(如适用)

PoC 必须是可执行 HTTP 请求代码块,并且路由路径必须使用真实路由规则。

证据引用(按运行模式强制)

  • STATIC_MAPPING:不强制引用 trace 的 EVID_* 证据点(只需输出鉴权分级与 P0/P1 分桶依据)。
  • TRACE_AUDIT:每条疑似鉴权风险必须逐项引用 trace 输出中的证据(允许状态标记为待验证,但证据引用必须存在):
  1. EVID_AUTH_PATH_PROTECTED_MATCH:路由进入受保护 handler 的路径匹配证据(对应 trace 的分支路径证据)
  2. EVID_AUTH_TOKEN_DECODE_JUDGMENT:登录态/Token 解码结果如何被判断的证据(对应 trace 中 session/JWT 读取与条件分支)
  3. EVID_AUTH_PERMISSION_CHECK_EXEC:权限判断函数或条件语句(如 hasRole/authorize)的执行证据(trace sink 定位或分支证据)
  4. EVID_AUTH_IDOR_OWNERSHIP_CONDITION:IDOR 归属校验(WHERE/条件)是否包含 owner_id/user_id 的证据(trace 中最终查询条件或状态更新语句)

tracer 证据缺失处理(强制)

  • STATIC_MAPPING:不适用(分桶依据以静态代码证据为准)。
  • TRACE_AUDIT:若 trace 契约校验失败或无法定位 1~4 任一关键证据点:该风险只能标记为 ⚠️待验证,不得给出 ✅已确认可利用 或“确定可绕过”的结论。