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

php-file-read-audit

PHPのWebソースコードにおけるファイル読み込みの脆弱性を自動で診断し、修正案や実証コードを提示するSkill。

📜 元の英語説明(参考)

PHP Web 源码任意文件读取/路径穿越审计工具。识别文件读取 Sink,追踪路径来源与校验逻辑,输出可利用性分级、PoC 与修复建议(禁止省略)。

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

一言でいうと

PHPのWebソースコードにおけるファイル読み込みの脆弱性を自動で診断し、修正案や実証コードを提示する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 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[Skill 名] php-file-read-audit

PHP 任意ファイル読み取り監査(php-file-read-audit)

PHPプロジェクトのソースコードを分析し、ファイル読み取りとインクルード実行のリスクを特定します。具体的には、パス・トラバーサルによる任意のファイル読み取り、任意のファイル(include/require)のインクルードによる情報漏洩、またはコード実行(インクルードされるコンテンツが実行可能である場合、またはストリームラッパーの影響を受ける場合)を特定します。

分類と番号付け

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

FILE Sink(必須)

以下の関数/構文を特定します。

  • 読み取り:file_get_contents/readfile/fopen/stream_get_contents/file/Storage::get
  • インクルード:include/require/include_once/require_once(パス連結のリスクは特に高危険です)
  • 圧縮/アーカイブ:ZipArchive->open(パスが制御可能な場合)
  • ストリームラッパー/フィルター:php://filterphp://input(ファイルコンテンツとして読み取られる/インクルードされる場合) 危険:allow_url_fopen/allow_url_include またはラッパーが許可されている場合、読み取り/インクルードはプロトコルをまたぐ可能性があります。 危険なパターン:
  • 読み取り/インクルードパス変数がユーザー入力から直接取得されている
  • パス連結が正規化されておらず、basePath の検証が行われていない
  • file://php://data://zip:// などのストリームラッパーが許可されており、制限されていない
  • include/require のシナリオで allow_url_include=On が存在するか、または設定/カプセル化によって間接的にネットワーク/クロスプロトコルインクルードが有効になっている証拠がある

パス・トラバーサル検出(必須)

分析し、以下の証拠を提示する必要があります。

  • ../..\\、混合区切り文字がフィルタリングされているか
  • realpath/canonicalize が行われ、basePath でプレフィックスが検証されているか
  • ストリームラッパー(wrapper)プレフィックス(php://file://phar://zip:// など)が処理されているか(項目ごとに証拠を提示する必要があります)
  • エンコーディング/二重エンコーディング/大文字小文字/末尾のスペース/\0(旧バージョンの PHP)によるバイパスの可能性
  • サフィックス/拡張子がホワイトリスト化されており、ホワイトリストがバイパスされにくいか

インクルード実行判定(強制:真陽性の向上)

制御可能なパスを使用する include/require* が検出された場合、以下の判定証拠を出力する必要があります(スキップできません)。

  1. インクルードコンテンツタイプ:インクルード対象がPHPコードとして実行される可能性があるか(例:拡張子/解析方法/実行パスの証拠)
  2. インクルードパスの最終解析結果:ラッパー解析後も制御可能なリソースを指しているか
  3. 実行面境界include/require が例外処理、return/throw 分岐の後に位置しているか(読み取り可能でも実行されない可能性があります)
  4. 設定証拠allow_url_include=On、または auto_prepend_file/auto_append_file、またはカスタムカプセル化による include の許可ポイントが存在するか

tracer トリガー条件(必須)

  • パスが多層の関数/JSONフィールドを介して渡される
  • 分岐が存在する:検証ロジックが特定のパス分岐でのみ有効であるか

報告出力

以下に出力します。

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

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

以下を必ず含める必要があります。

  • 位置の証拠
  • データフローチェーン(Source→Sink、パス連結と検証分岐を含む)
  • 証拠の引用(php-route-tracer の出力から、項目ごとに引用する必要があります):trace の ## 9) Sink Evidence Type Checklist(FILE 行)の証拠要点に対応し、引用する必要があります。
    • EVID_FILE_WRAPPER_PREFIX:wrapper/ストリームラッパープレフィックス(例:php:///phar:///zip:// など)
    • EVID_FILE_RESOLVED_TARGET:final/resolved target(wrapper 解析後の最終ターゲット)
    • EVID_FILE_INCLUDE_REQUIRE_EXEC_BOUNDARY:include/require 実行面境界(PHPコードが実行されるか、コンテンツの読み取り/エラーのみか;この証拠点は allow_url_include/カプセル化の許可に関連する証拠も含むことができます)
  • 悪用可能な前提条件(認証/入力の制御可能性/トリガー条件)
  • 実行可能な PoC(HTTPリクエスト、実際のルートを含む)
  • 推奨される修正(basePath 検証 + ストリームラッパー無効化ポリシー + include/require の安全な代替要点 + コード検索ステートメント)

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

  • trace の ## 9) Sink Evidence Type Checklist(FILE 行)のいずれかの重要な証拠要点が欠落しているか、この脆弱性項目に対応できない場合:この脆弱性項目のステータスは ⚠️要検証 とする必要があります(直接 ✅悪用可能と確認済み とすることはできません)。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

PHP 任意文件读取审计(php-file-read-audit)

分析 PHP 项目源码,识别文件读取与包含执行风险:路径穿越导致任意文件读取、包含任意文件(include/require)导致信息泄露或代码执行(当包含的是可执行内容/或受流包装器影响)。

分级与编号

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

FILE Sink(必做)

识别以下函数/语法:

  • 读取:file_get_contents/readfile/fopen/stream_get_contents/file/Storage::get
  • 包含:include/require/include_once/require_once(路径拼接风险尤其高危)
  • 压缩/归档:ZipArchive->open(若路径可控)
  • 流包装/过滤:php://filterphp://input(若被作为文件内容读取/包含) 危险:当 allow_url_fopen/allow_url_include 或 wrapper 允许时,读取/包含可跨协议 危险模式:
  • 读取/包含路径变量直接来自用户输入
  • 路径拼接未做规范化与 basePath 校验
  • 允许 file://php://data://zip:// 等流包装且未限制
  • 在 include/require 场景存在 allow_url_include=On 或通过配置/封装间接开启网络/跨协议 include 的证据

路径穿越检测(必做)

必须分析并给出证据:

  • 是否过滤 ../..\\、混合分隔符
  • 是否做 realpath/canonicalize 并用 basePath 校验前缀
  • 是否处理流包装器(wrapper)前缀:php://file://phar://zip:// 等(必须逐项证据化)
  • 编码/双重编码/大小写/尾部空格/\0(旧版本 PHP)绕过可能性
  • 是否对后缀/扩展名做白名单,并且白名单不易绕过

包含执行判定(强制:提升真阳性)

当检测到 include/require* 使用可控路径时,必须输出以下判定证据(不能跳过):

  1. 包含内容类型:包含目标是否可能被当作 PHP 代码执行(例如扩展名/解析方式/执行路径证据)
  2. 包含路径的最终解析结果:wrapper 解析后是否仍指向可控资源
  3. 执行面边界:include/require 是否位于异常处理、return/throw 分支之后(即使能读也可能不执行)
  4. 配置证据:是否存在 allow_url_include=On、或 auto_prepend_file/auto_append_file、或自定义封装对 include 的放行点

tracer 触发条件(必做)

  • 路径经过多层函数/JSON 字段传递
  • 存在分支:校验逻辑是否只在某路径分支生效

报告输出

输出到:

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

漏洞条目模板(强制)

必须包含:

  • 位置证据
  • 数据流链(Source→Sink,包含路径拼接与校验分支)
  • 证据引用(来自 php-route-tracer 输出,必须逐项引用):必须对应并引用 trace 的 ## 9) Sink Evidence Type Checklist(FILE 行)中的证据要点
    • EVID_FILE_WRAPPER_PREFIX:wrapper/流包装前缀(如 php:///phar:///zip:// 等)
    • EVID_FILE_RESOLVED_TARGET:final/resolved target(wrapper 解析后的最终目标)
    • EVID_FILE_INCLUDE_REQUIRE_EXEC_BOUNDARY:include/require 执行面边界(是否会执行 PHP 代码 vs 仅读取内容/报错;该证据点也可包含与 allow_url_include/封装放行相关的证据)
  • 可利用前置条件(鉴权/输入可控性/触发条件)
  • 可执行 PoC(HTTP 请求,含真实路由)
  • 建议修复(basePath 校验 + 流包装禁用策略 + include/require 的安全替代要点 + 代码搜索语句)

tracer 证据缺失处理(强制)

  • 若 trace 的 ## 9) Sink Evidence Type Checklist(FILE 行)中任一关键证据要点缺失或无法对应到本条漏洞:该条漏洞状态必须为 ⚠️待验证(不得直接给出 ✅已确认可利用)。