php-route-mapper
PHP Webアプリケーションのソースコードから、すべての入口ルートとパラメータ構造を抽出し、完全なリクエストテンプレートとパラメータリストを出力する分析ツールです。
📜 元の英語説明(参考)
PHP Web 源码路由与参数映射分析工具。从源码中提取所有入口路由与参数结构,输出完整请求模板与参数清单(禁止省略)。
🇯🇵 日本人クリエイター向け解説
PHP Webアプリケーションのソースコードから、すべての入口ルートとパラメータ構造を抽出し、完全なリクエストテンプレートとパラメータリストを出力する分析ツールです。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o php-route-mapper.zip https://jpskill.com/download/6014.zip && unzip -o php-route-mapper.zip && rm php-route-mapper.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/6014.zip -OutFile "$d\php-route-mapper.zip"; Expand-Archive "$d\php-route-mapper.zip" -DestinationPath $d -Force; ri "$d\php-route-mapper.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
php-route-mapper.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
php-route-mapperフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-17
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
[Skill 名] php-route-mapper
PHP ソースコードのルートとパラメータマッパー
PHP Web プロジェクトのソースコードを分析し、完全な HTTP ルートエントリとリクエストパラメータ構造を抽出し、セキュリティテストに使用できるリクエストテンプレート(Burp/Repeater スタイル)を生成し、自動的に Markdown 形式で保存します。
CRITICAL:完全な出力(必須)
このスキルは、検出されたすべてのルートとインターフェースを出力しなければならず、省略は許可されません。
- 省略プレースホルダーは禁止です。完全なルートとパラメータの内容を出力する必要があります。
- 「主要なルート/重要なルート」のみの出力は禁止です。
- 各ルートには、HTTP メソッド、パスルール、ハンドラの場所、完全なパラメータ構造、完全なリクエストテンプレート(コードブロック内)を含める必要があります。
コア入力
ユーザーが提供するもの:
source_path:PHP プロジェクトのソースコードのルートディレクトリ オプション:context_path:リバースプロキシ/ゲートウェイのプレフィックスが存在する場合、完全なパスを結合するために使用できます(証拠のソースが必要です)。
出力ディレクトリ構造(推奨)
{output_path}/
├── route_mapping/
│ ├── routes_{timestamp}.md
│ └── params_{timestamp}.md
└── quality/
└── route_mapper_validation_{timestamp}.md
パスとパイプライン結合モードでの対応関係については、shared/IO_PATH_CONVENTION.md を参照してください(route_mapping/*.md はレポート内の「ルート/パラメータ」セクションと同等です)。
認識範囲(必須)
- ルート設定/定義(フレームワークごとに認識)
- Laravel:
routes/web.php、routes/api.php、Route::get/post/{subpath}、Route::resource、Route group のプレフィックスとミドルウェア - Symfony:
config/routes/*、PHP8 attribute#[Route({route_options})]、Annotation@Route({route_options}) - Slim:
$app->get/post/any({handler})、カスタムミドルウェア - WordPress:
admin-post.php/admin-ajax.php、add_action('admin_post_*')、add_action('wp_ajax_*') - 純粋な PHP:フロントコントローラ(例:
public/index.php)のディスパッチロジック、$_SERVER['REQUEST_URI']に基づくルーティングマッチング
- Laravel:
- 動的ルート/パラメータ化ルート(必須)
{id}/(?P<id>{id_pattern})/ 正規表現ルート:制御可能なパラメータをリストアップする必要があります。- ルート制約(where/regex limit):制約ルールと制御可能性の境界を出力する必要があります。
パラメータ構造解析(必須)
各ルートについて、以下のパラメータソースとタイプ情報を出力します。
- Path パラメータ:ルーティングルールからのプレースホルダー(例:
{id}を出力) - Query パラメータ:
$_GET/request()->query({query})/ フレームワークのクエリ解析結果 - Body パラメータ:
php://input、$_POST、JSONjson_decode({json}) - Header パラメータ:
getallheaders()、$_SERVER[{value}]、フレームワークの request header API - Cookie パラメータ:
$_COOKIE - File パラメータ:
$_FILES(フィールド名とファイル名のソースを出力)
ハンドラの場所(必須)
各ルートは、ハンドラのソースの証拠を提供する必要があります。
- ファイルパス(相対/絶対のいずれでも可ですが、一貫している必要があります)
- 関数/クラス/メソッドシグネチャ(ソースコード内で特定できる名前)
- 主要なディスパッチポイント:ルーティングマッチングがハンドラにどのように入るか(例:switch case / include ファイルチェーン)
出力形式(必須)
routes_{timestamp}.md:メインインデックス(項目ごとにリストアップ)
説明:このスキルは、routes_{timestamp}.md 内の === [N] {route_summary} === の N を HTTP ルートの route_id として使用します(パイプラインの後の段階で route_tracer/{route_id}/trace_{timestamp}.md ファイルのバケット分けに使用されます)。CLI / hook / sink-only などの合成 route_id は、php-audit-pipeline のステージ 3 で high_risk_routes_{timestamp}.md に書き込まれ、このファイルの [N] 順序は占有しません。
# {project_name} - ルートとインターフェースインデックス(PHP)
生成時間: {timestamp}
分析パス: {source_path}
## ルートリスト(すべて)
=== [1] GET /path/to/{id} ===
HTTP メソッド: GET
ルートパスルール: /path/to/{id}
ハンドラ: ControllerClass@method / functionName
場所: path/to/file.php:line(行番号を取得できない場合は、「要確認:手動でファイルを開いて確認が必要」と記載するが、ファイルパスは提供する)
パラメータ概要:
Path: id (型推論/制約)
Query: {query_params}
=== [2] POST /path/to/{id}/action ===
HTTP メソッド: POST
ルートパスルール: /path/to/{id}/action
ハンドラ: ControllerClass@action / functionName
場所: path/to/file.php:line(行番号を取得できない場合は、「要確認:手動でファイルを開いて確認が必要」と記載するが、ファイルパスは提供する)
パラメータ概要:
Path: id (型推論/制約)
Query: {query_params}
params_{timestamp}.md:パラメータ詳細(項目ごとにリストアップ)
# {project_name} - ルートパラメータ構造(項目ごと)
生成時間: {timestamp}
=== ルート: GET /path/to/{id} ===
1) Path パラメータ
| パラメータ | タイプ/制約 | 位置 | 必須 |
|------|------------|------|------|
| id | int/regex{id_pattern} | Router rule | はい/いいえ/不明 |
2) Query パラメータ
| パラメータ | タイプ | ソース | 必須 | 説明 |
3) Body パラメータ(例:JSON)
| フィールド | タイプ | JSON パス | 必須 |
4) Header/ Cookie / File(存在する場合)
| フィールド | タイプ | ソース | 必須 |
5) 完全なリクエストテンプレート(コードブロック内必須)
```http
GET /path/to/{id}?a={a}&b={b} HTTP/1.1
Host: {host}
Cookie: {cookie}
Authorization: Bearer {token}
Content-Type: application/json
{"k":"{v}"}
## 出力前の自己チェック(必須)
- [ ] routes と params の各ルートの「シーケンス番号/ルート識別子」が一致していること
- [ ] 省略プレースホルダーが出現していないこと
- [ ] 各ルートに「完全なリクエストテンプレート」コードブロックがあること 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
PHP 源码 Route & Param Mapper
分析 PHP Web 项目源码,提取完整的 HTTP 路由入口与请求参数结构,生成可用于安全测试的请求模板(Burp/Repeater 风格),并自动保存为 Markdown。
CRITICAL:完整输出(强制)
此技能必须输出所有发现的路由与接口,不允许省略:
- 禁止出现省略占位符;必须输出完整的路由与参数内容
- 禁止只输出“关键路由/重要路由”
- 每条路由必须包含:HTTP 方法、路径规则、处理器位置、完整参数结构、完整请求模板(在代码块里)
核心输入
用户提供:
source_path:PHP 项目源码根目录 可选:context_path:如果存在反向代理/网关前缀,可用于拼接完整路径(必须有证据来源)
输出目录结构(建议)
{output_path}/
├── route_mapping/
│ ├── routes_{timestamp}.md
│ └── params_{timestamp}.md
└── quality/
└── route_mapper_validation_{timestamp}.md
路径与流水线合并模式下的对应关系见 shared/IO_PATH_CONVENTION.md(route_mapping/*.md 与报告内「路由/参数」章节等价)。
识别范围(必做)
- 路由配置/定义(按框架识别)
- Laravel:
routes/web.php、routes/api.php、Route::get/post/{subpath}、Route::resource、Route group 前缀与中间件 - Symfony:
config/routes/*、PHP8 attribute#[Route({route_options})]、Annotation@Route({route_options}) - Slim:
$app->get/post/any({handler})、自定义中间件 - WordPress:
admin-post.php/admin-ajax.php、add_action('admin_post_*')、add_action('wp_ajax_*') - 纯 PHP:front controller(如
public/index.php)的分发逻辑、基于$_SERVER['REQUEST_URI']的路由匹配
- Laravel:
- 动态路由/参数化路由(必做)
{id}/(?P<id>{id_pattern})/ 正则路由:必须把可控参数列出来- 路由约束(where/regex limit):必须输出约束规则与可控性边界
参数结构解析(必做)
对每条路由输出以下参数来源与类型信息:
- Path 参数:来自路由规则的占位(输出如
{id}) - Query 参数:
$_GET/request()->query({query})/ 框架 query 解析结果 - Body 参数:
php://input、$_POST、JSONjson_decode({json}) - Header 参数:
getallheaders()、$_SERVER[{value}]、框架 request header API - Cookie 参数:
$_COOKIE - File 参数:
$_FILES(输出字段名与 filename 来源)
处理器位置(必做)
每条路由必须给出处理器来源证据:
- 文件路径(相对/绝对均可,但必须一致)
- 函数/类/方法签名(在源码中能定位到的名称)
- 关键分发点:路由匹配如何进入 handler(如 switch case / include 文件链)
输出格式(强制)
routes_{timestamp}.md:主索引(逐条列出)
说明:本 skill 使用 routes_{timestamp}.md 中 === [N] {route_summary} === 的 N 作为 HTTP 路由的 route_id(流水线后续用于 route_tracer/{route_id}/trace_{timestamp}.md 文件分桶)。CLI / hook / sink-only 等合成 route_id 由 php-audit-pipeline 阶段 3 写入 high_risk_routes_{timestamp}.md,不占用本文件的 [N] 序号。
# {project_name} - 路由与接口索引(PHP)
生成时间: {timestamp}
分析路径: {source_path}
## 路由清单(全部)
=== [1] GET /path/to/{id} ===
HTTP 方法: GET
路由路径规则: /path/to/{id}
处理器: ControllerClass@method / functionName
位置: path/to/file.php:line(若无法获取行号,标注“待定位:需人工打开文件确认”但仍给出文件路径)
参数概览:
Path: id (类型推断/约束)
Query: {query_params}
=== [2] POST /path/to/{id}/action ===
HTTP 方法: POST
路由路径规则: /path/to/{id}/action
处理器: ControllerClass@action / functionName
位置: path/to/file.php:line(若无法获取行号,标注“待定位:需人工打开文件确认”但仍给出文件路径)
参数概览:
Path: id (类型推断/约束)
Query: {query_params}
params_{timestamp}.md:参数详细(逐条列出)
# {project_name} - 路由参数结构(逐条)
生成时间: {timestamp}
=== 路由: GET /path/to/{id} ===
1) Path 参数
| 参数 | 类型/约束 | 位置 | 必填 |
|------|------------|------|------|
| id | int/regex{id_pattern} | Router rule | 是/否/不确定 |
2) Query 参数
| 参数 | 类型 | 来源 | 必填 | 说明 |
3) Body 参数(如 JSON)
| 字段 | 类型 | JSON 路径 | 必填 |
4) Header/ Cookie / File(如有)
| 字段 | 类型 | 来源 | 必填 |
5) 完整请求模板(必须在代码块里)
```http
GET /path/to/{id}?a={a}&b={b} HTTP/1.1
Host: {host}
Cookie: {cookie}
Authorization: Bearer {token}
Content-Type: application/json
{"k":"{v}"}
## 输出前自检(强制)
- [ ] routes 与 params 中每条路由“序号/路由标识”一致
- [ ] 没有出现省略占位符
- [ ] 每条路由都有“完整请求模板”代码块