php-sql-audit
PHPのWebソースコードからSQL実行箇所を特定し、注入リスクを分析して修正案まで提示するSkill。
📜 元の英語説明(参考)
PHP Web 源码 SQL 注入漏洞审计工具。从源码中识别所有 SQL 执行点并分析注入风险,输出可利用性分级、PoC 与修复建议(禁止省略)。
🇯🇵 日本人クリエイター向け解説
PHPのWebソースコードからSQL実行箇所を特定し、注入リスクを分析して修正案まで提示するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 この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-17
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
[Skill 名] php-sql-audit
PHP SQL 注入監査(php-sql-audit)
PHP プロジェクトのソースコードを分析し、SQL 実行関連コード(PDO/mysqli/ORM)を特定します。ユーザー入力から SQL 構築点までを追跡し、SQL インジェクションの有無を検証し、完全な脆弱性レポートを出力します。
CRITICAL:省略の禁止と誤検知の禁止
- ルートパラメータに現れるすべての文字列ソース(GET/POST/Body/パラメータフィールド)が SQL に入るパスを監査する必要があります。
- 「データフロー追跡証拠」を使用して悪用可能性を判断する必要があります。キーワード推測のみに頼ってはいけません。
- 省略を禁止します。いかなるプレースホルダーも省略してはなりません。完全な脆弱性証拠チェーンと修正提案を出力する必要があります。
分類と番号付け
- 詳細については、
shared/SEVERITY_RATING.mdを参照してください。 - 脆弱性番号:
{C/H/M/L}-SQL-{連番}
入力依存
少なくとも以下のものがあることを推奨します(shared/IO_PATH_CONVENTION.md と一致します。パイプラインをマージする際は、総レポートの同等の章を読み込むだけで構いません):
routes_{timestamp}.md(独立して保存される場合は通常route_mapping/routes_{timestamp}.md)params_{timestamp}.md(独立して保存される場合は通常route_mapping/params_{timestamp}.md) オプションですが推奨:route_tracer/の出力。パラメータの実際の使用状況を正確に判断するために使用します。
SQL シンクの識別(必須)
- PDO / PDOStatement
- 比較的危険:
$pdo->query($sql)/$pdo->exec($sql)($sql が連結/ユーザー入力を含む場合) - 形式チェック:
$pdo->prepare($sql)は、$sql でプレースホルダーを使用し、その後のbindParam/bindValueまたは正しいパラメータ渡しがある場合にのみ安全です。 - ORM/DB ラッパー:
DB::select(DB::raw({value}))、DoctrinecreateQueryなど
- 比較的危険:
- mysqli / mysqli_stmt
mysqli_query($conn, $sql)の連結は危険です。mysqli_prepareは、prepare + bind が正しく行われた場合にのみ安全である可能性があります。
- 典型的な危険な構築パターン(必須)
- SQL 文字列と変数の連結:
.,sprintf,vsprintf,implode/join+ SQL キーワード - 動的ソート:
order by $x/ORDER BY ".$x."(一般的な高リスク)
- SQL 文字列と変数の連結:
tracer をトリガーする必要がある条件(必須)
いずれかの条件を満たす場合、php-route-tracer(または同等の追跡証拠)を呼び出す必要があります。
- パラメータが多層に渡されたり、JSON デコード後にフィールドが SQL に入る場合
- SQL 構築点が基底クラス/ユーティリティクラス/親関数にある場合
- 分岐条件(if/try/catch)が存在し、SQL の実行が不確実な場合
レポート出力
出力先:
{output_path}/vuln_audit/
└── sql_{timestamp}.md
脆弱性レポート項目テンプレート(必須)
### [{等級プレフィックス}-SQL-{連番}] {リスクタイトル}
| 項目 | 情報 |
|------|------|
| 深刻度 | {🔴/🟠/🟡/🔵} (CVSS {score}) |
| 到達可能性 (R) | {0-3} - {理由} |
| 影響範囲 (I) | {0-3} - {理由} |
| 悪用複雑度 (C) | {0-3} - {理由} |
| 悪用可能性 | ✅ 確認済み / ⚠️ 検証待ち / ❌ 悪用不可 / 🔍 環境依存 |
| 位置 | {file}:{line} ({Function/Class}) |
#### データフローチェーン(Source → Sink)
(ルートごとに一行ずつ記述:リクエストパラメータの読み取り -> 変数への代入/連結/変換 -> 分岐 -> SQL 実行点。省略禁止)
#### 悪用可能な前提条件
- 認証要件:{不要/ログイン必要/特定権限必要}
- 入力制御可能性:{完全に制御可能/条件付きで制御可能/制御不可}
- トリガー条件:{分岐/例外/環境依存}
#### 証拠引用(必須:php-route-tracer から)
SQL の疑わしい脆弱性ごとに、trace 出力の `## 9) Sink Evidence Type Checklist` の **SQL 行**に対応する証拠要点を個別に引用する必要があります(状態が検証待ちであっても、証拠引用は必須です):
1. `EVID_SQL_EXEC_POINT`:SQL 実行関数/ステートメントの位置(trace の SQL 実行点証拠に対応)
2. `EVID_SQL_STRING_CONSTRUCTION`:SQL 文字列の構築/連結位置(trace の SQL 連結証拠に対応)
3. `EVID_SQL_USER_PARAM_TO_SQL_FRAGMENT`:ユーザー制御可能なパラメータから SQL フラグメントへのマッピング(trace の制御可能性マトリックスフィールド証拠に対応)
#### tracer 証拠欠落の処理(必須)
- 上記 1~3 のいずれかの重要な証拠要点が見つからない場合、その脆弱性の状態は `⚠️検証待ち` としかマークできず、直接 `✅悪用可能と確認済み` とすることはできません。
#### 検証 PoC(必須、実行可能なリクエスト)
```http
{HTTP Method} {完全なパスとクエリ/Body} HTTP/1.1
Host: {host}
{必要な Header/Session/JWT/Cookie}
{Payload}
修正提案
- 安全な記述の要点(PDO prepare + bind と、SQL フラグメントにユーザー入力を連結しないことの保証)を提示します。
- 同様の連結点をすべて特定するためのコード検索ステートメント(
rg/grepスタイル)を提示します。
出力完全性チェック(必須)
- [ ] 少なくとも以下を出力します:リスク統計 + 各脆弱性の完全な項目
- [ ] いかなる省略プレースホルダーも出現しません。
- [ ] 各脆弱性には以下が含まれます:データフローチェーン、悪用可能な前提条件、実行可能な PoC、修正提案。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
PHP SQL 注入审计(php-sql-audit)
分析 PHP 项目源码,识别 SQL 执行相关代码(PDO/mysqli/ORM),追踪用户输入到 SQL 构造点,验证是否存在 SQL 注入,并输出完整漏洞报告。
CRITICAL:禁止省略与禁止误报
- 必须审计所有在路由参数中出现的字符串来源(GET/POST/Body/参数字段)进入 SQL 的路径
- 必须使用“数据流追踪证据”判定可利用性;不得只靠关键字猜测
- 禁止省略:不得出现任何省略占位符;必须输出完整的漏洞证据链与修复建议
分级与编号
- 详见:
shared/SEVERITY_RATING.md - 漏洞编号:
{C/H/M/L}-SQL-{序号}
输入依赖
建议至少有(与 shared/IO_PATH_CONVENTION.md 一致;合并流水线时读总报告中等价章节即可):
routes_{timestamp}.md(独立落盘时常为route_mapping/routes_{timestamp}.md)params_{timestamp}.md(独立落盘时常为route_mapping/params_{timestamp}.md) 可选但推荐:route_tracer/输出,用于精准判定参数实际使用状态
SQL Sink 识别(必做)
- PDO / PDOStatement
- 相对危险:
$pdo->query($sql)/$pdo->exec($sql)(若 $sql 来自拼接/包含用户输入) - 形式检查:
$pdo->prepare($sql)只有在$sql中使用占位符且后续bindParam/bindValue或正确传参时更安全 - ORM/DB 包装:
DB::select(DB::raw({value}))、DoctrinecreateQuery等
- 相对危险:
- mysqli / mysqli_stmt
mysqli_query($conn, $sql)拼接危险mysqli_prepare只有 prepare + bind 正确时才可能安全
- 典型危险构造模式(必做)
- SQL 字符串与变量拼接:
.,sprintf,vsprintf,implode/join+ SQL 关键字 - 动态排序:
order by $x/ORDER BY ".$x."(常见高危)
- SQL 字符串与变量拼接:
需要触发 tracer 的条件(必做)
满足任一条时必须调用 php-route-tracer(或同等追踪证据):
- 参数经过多层传递或 JSON 解码后取字段进入 SQL
- SQL 构造点位于基类/工具类/父函数中
- 存在分支条件(if/try/catch)导致 SQL 是否执行不确定
报告输出
输出到:
{output_path}/vuln_audit/
└── sql_{timestamp}.md
漏洞报告条目模板(强制)
### [{等级前缀}-SQL-{序号}] {风险标题}
| 项目 | 信息 |
|------|------|
| 严重等级 | {🔴/🟠/🟡/🔵} (CVSS {score}) |
| 可达性 (R) | {0-3} - {理由} |
| 影响范围 (I) | {0-3} - {理由} |
| 利用复杂度 (C) | {0-3} - {理由} |
| 可利用性 | ✅ 已确认 / ⚠️ 待验证 / ❌ 不可利用 / 🔍 环境依赖 |
| 位置 | {file}:{line} ({Function/Class}) |
#### 数据流链(Source → Sink)
(按路由逐行写出:请求参数读取 -> 变量赋值/拼接/转换 -> 分支 -> SQL 进入执行点。禁止省略)
#### 可利用前置条件
- 鉴权要求:{无需/需登录/需特定权限}
- 输入可控性:{完全可控/条件可控/不可控}
- 触发条件:{分支/异常/环境依赖}
#### 证据引用(强制:来自 php-route-tracer)
每条 SQL 疑似漏洞必须逐项引用 trace 输出中 `## 9) Sink Evidence Type Checklist` 的 **SQL 行**对应证据要点(允许状态为待验证,但证据引用必须存在):
1. `EVID_SQL_EXEC_POINT`:SQL 执行函数/语句位置(对应 trace 的 SQL 执行点证据)
2. `EVID_SQL_STRING_CONSTRUCTION`:SQL 字符串构造/拼接位置(对应 trace 的 SQL 拼接证据)
3. `EVID_SQL_USER_PARAM_TO_SQL_FRAGMENT`:用户可控参数到 SQL 片段的映射(对应 trace 的可控性矩阵字段证据)
#### tracer 证据缺失处理(强制)
- 若无法定位上述 1~3 任一关键证据要点:该漏洞状态只能标记为 `⚠️待验证`,不得直接给出 `✅已确认可利用`。
#### 验证 PoC(强制,可执行请求)
```http
{HTTP Method} {完整路径与查询/Body} HTTP/1.1
Host: {host}
{必要 Header/Session/JWT/Cookie}
{Payload}
建议修复
- 给出安全写法要点(PDO prepare + bind 且保证 SQL 片段不拼接用户输入)
- 给出代码搜索语句(
rg/grep风格)用于定位所有同类拼接点
输出完整性检查(强制)
- [ ] 至少输出:风险统计 + 每条漏洞完整条目
- [ ] 不出现任何省略占位符
- [ ] 每条漏洞都包含:数据流链、可利用前置条件、可执行 PoC、修复建议