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

php-open-redirect-audit

PHPのWebソースコードを分析し、ユーザーが制御可能なリダイレクトの脆弱性を検出し、修正案とPoCを提示するSkill。

📜 元の英語説明(参考)

PHP Web 源码开放重定向审计工具。识别用户可控重定向目的地进入 header Location/跳转函数,分析校验与 allowlist,输出分级、PoC 与修复建议(禁止省略)。

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

一言でいうと

PHPのWebソースコードを分析し、ユーザーが制御可能なリダイレクトの脆弱性を検出し、修正案とPoCを提示するSkill。

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

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

🎯 この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-17
同梱ファイル
1

📖 Skill本文(日本語訳)

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

[スキル名] php-open-redirect-audit

PHP オープンリダイレクト監査(php-open-redirect-audit)

PHP プロジェクトのソースコードを分析し、すべての「ジャンプ/リダイレクト」動作がユーザーによって目的のアドレスを制御される可能性がないかを確認します。これにより、フィッシングや OAuth などのプロセスが乗っ取られるのを防ぎます。

分類と番号付け

  • 詳細については、shared/SEVERITY_RATING.md を参照してください。
  • 脆弱性番号:{C/H/M/L}-REDIR-{連番}

必須のシンク(強制)

以下のジャンプ出力点を特定します。

  • header("Location: {value}")
  • <meta http-equiv="refresh" content="{value}">
  • redirect() / to() / return redirect({value})
  • カスタムジャンプ関数(内部で最終的に Location 出力を呼び出すもの)

制御可能性の追跡(必須)

以下の2種類の変数を追跡する必要があります。

  1. 目的地のソース:通常、$_GET['next']/$_POST['url']/Referer/return_to から来ます。
  2. 目的地の検証:相対パスのみを許可しているか、許可リストを使用しているか、スキーム(http://///)を拒否しているか、ドメインを検証しているか。

回避条件(必須)

潜在的な回避策を特定し、出力する必要があります。

  • スキームの回避://evil.comhttp:%2f%2fevil.com
  • エンコーディングの回避:二重エンコーディング、URL エンコードされたコロン/スラッシュ
  • 末尾/空白文字の回避(古い実装でよく見られます)

レポート出力

{output_path}/vuln_audit/redir_{timestamp}.md

項目テンプレート(強制)

各脆弱性には以下を含める必要があります。

  • 位置の証拠:ジャンプ関数の位置 + ルート
  • データフローチェーン:ユーザー入力 -> 検証 -> header/redirect
  • 悪用可能な前提条件:通常、ログインが必要(ログイン後のリダイレクトの場合)と、攻撃者がパラメータを制御できるかどうか。
  • 検証 PoC(実際のルートであること。目的地のパラメータを実際のフィールド名に置き換えること)
  • 修正の提案:相対パスのみを許可する + サーバー側の許可リスト + エンコーディング/スキームを正規化して検証する。

証拠の引用(強制:php-route-tracer から)

各オープンリダイレクトの疑いのある脆弱性について、トレース出力の ## 9) Sink Evidence Type ChecklistREDIR 行に対応する証拠の要点を個別に引用する必要があります(ステータスは「検証待ち」でも構いませんが、証拠の引用は必須です)。

  1. EVID_REDIR_OUTPUT_POINT:ジャンプ出力点の位置の証拠(header/redirect の最終出力位置)
  2. EVID_REDIR_DEST_SOURCE_MAPPING:目的地のソース変数マッピングの証拠(ルートパラメータから目的地変数まで)
  3. EVID_REDIR_DEST_VALIDATION_NORMALIZATION:目的地の検証/正規化/許可リスト/スキーム拒否の分岐の証拠(エンコーディング回避処理の分岐を含む)

tracer 証拠の欠落処理(強制)

  • 上記 1~3 のいずれかの重要な証拠の要点を特定できない場合:その脆弱性のステータスは ⚠️検証待ち としかマークできず、直接 ✅悪用可能と確認済み とすることはできません。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

PHP 开放重定向审计(php-open-redirect-audit)

分析 PHP 项目源码中,所有“跳转/重定向”行为是否可能被用户控制目的地址,导致钓鱼或 OAuth 等流程被劫持。

分级与编号

  • 详见:shared/SEVERITY_RATING.md
  • 漏洞编号:{C/H/M/L}-REDIR-{序号}

必检 Sink(强制)

识别以下跳转输出点:

  • header("Location: {value}")
  • <meta http-equiv="refresh" content="{value}">
  • redirect() / to() / return redirect({value})
  • 自定义跳转函数(内部最终调用 Location 输出)

可控性追踪(必做)

必须追踪以下两类变量:

  1. 目的地来源:通常来自 $_GET['next']/$_POST['url']/Referer/return_to
  2. 目的地校验:是否只允许相对路径、是否 allowlist、是否拒绝 scheme(http://///)、是否校验域名

绕过条件(必做)

必须识别并输出潜在绕过:

  • scheme 绕过://evil.comhttp:%2f%2fevil.com
  • 编码绕过:双重编码、URL 编码的冒号/斜杠
  • 尾部/空白字符绕过(旧实现常见)

报告输出

{output_path}/vuln_audit/redir_{timestamp}.md

条目模板(强制)

每条漏洞必须包含:

  • 位置证据:跳转函数位置 + 路由
  • 数据流链:用户输入 -> 校验 -> header/redirect
  • 可利用前置条件:通常需登录(若在登录后跳转)与攻击者能否控制参数
  • 验证 PoC(必须真实路由;把目的地参数替换为真实字段名)
  • 修复建议:只允许相对路径 + 服务器端 allowlist + 对编码/scheme 做归一化后校验

证据引用(强制:来自 php-route-tracer)

每条开放重定向疑似漏洞必须逐项引用 trace 输出中 ## 9) Sink Evidence Type ChecklistREDIR 行对应证据要点(允许状态为待验证,但证据引用必须存在):

  1. EVID_REDIR_OUTPUT_POINT:跳转输出点位置证据(header/redirect 的最终输出位置)
  2. EVID_REDIR_DEST_SOURCE_MAPPING:目的地来源变量映射证据(从路由参数到目的地变量)
  3. EVID_REDIR_DEST_VALIDATION_NORMALIZATION:目的地校验/归一化/allowlist/refuse scheme 的分支证据(含编码绕过处理分支)

tracer 证据缺失处理(强制)

  • 若无法定位上述 1~3 任一关键证据要点:该漏洞状态只能标记为 ⚠️待验证,不得直接给出 ✅已确认可利用