SONAE KNOWLEDGE / PHP SECURITY / 07

PHPのファイルアップロード対策。拡張子確認から保存・配信まで

ファイルを受け取る、検査する、保存する、開く。それぞれの境界を分けて管理する。

公式資料確認:2026-10-26/AIによる資料確認・執筆

公式情報には各節で出典を付けています。確認表・架空例・受入条件はSONAEの提案です。制作と資料確認にAIを使用。本人の編集確認は未了です。専門家による独立した監修は受けていません。

受信できたことと、使ってよいことは別

OWASPは、拡張子・種類・サイズの確認、保存名の管理、Web公開領域の外への保存、認証・認可などを組み合わせる対策を説明しています。クライアントが申告したContent-Typeだけを信頼しません。ここから先はSONAEが提案する、受付から利用までの運用整理です。

公式情報:OWASP:ファイルアップロード対策(確認 2026-10-26)

業務が必要とするファイルを狭く決める

架空の経費受付なら、なぜ画像とPDFが必要か、誰がアップロードできるか、最大サイズと件数、保管期間を担当が決めます。便宜上すべての拡張子を許可してから、後で危険なものだけを除く形にしません。使わない圧縮ファイルや編集可能な形式を受け付けない判断も、業務要件の一部にできます。

SONAEの点検・運用提案。架空例。

受付から利用まで、未検査の経路を閉じる

受付から利用まで、未検査の経路を閉じる検査に失敗したファイルは保留する設計例です。検査で全脅威を排除できるという説明ではありません。01受付・隔離形式・量・所有者02検査と判断失敗なら保留03許可した配信閲覧権限・終了条件未検査ファイルの直公開検査完了の経路へ合流させない受付から利用まで、未検査の経路を閉じる検査に失敗したファイルは保留する設計例です。検査で全脅威を排除できるという説明ではありません。01受付・隔離形式・量・所有者02検査と判断失敗なら保留03許可した配信閲覧権限・終了条件未検査ファイルの直公開検査完了の経路へ合流させない
検査に失敗したファイルは保留する設計例です。検査で全脅威を排除できるという説明ではありません。
図の内容を文章で読む

受付・隔離:形式・量・所有者。検査と判断:失敗なら保留。許可した配信:閲覧権限・終了条件。進めない判断:未検査ファイルの直公開/検査完了の経路へ合流させない。検査に失敗したファイルは保留する設計例です。検査で全脅威を排除できるという説明ではありません。

元の名前を、保存先の指示にしない

SONAEの設計例では、受け取った名前は表示用の情報とし、保存先の識別はサーバー側で決めます。利用者が送ったパスを保存場所に使わないようにします。アップロード先をWebで実行できる場所から分離し、その後に追加される配信設定も確認します。拡張子を変えたから中身も安全になったという説明はしません。

SONAEの点検・運用提案。架空例。

検査前のファイルは、通常の利用経路へ出さない

受付、隔離、検査、許可、削除の状態を別に持つ管理を提案します。検査が失敗した場合や時間切れになった場合に、未検査のまま公開されないことを受入で確認します。ウイルス対策の結果が良好でも、あらゆる攻撃や情報流出を否定できるわけではありません。検査製品の対象と限界も運用に残します。

SONAEの点検・運用提案。架空例。

開く権限と、処理する権限を確認する

アップロードした人だけでなく、閲覧、ダウンロード、削除できる役割も決めます。帳票変換やAIへの読取りが加わるなら、その処理へ渡してよい内容と、処理側の外部通信も別に確認します。保管が非公開でも、変換や配信で公開される経路があれば同じ保護にはなりません。作業用の複製の所在と終了条件も追える形にします。

SONAEの点検・運用提案。架空例。

失敗と終了を含めて、受入を決める

架空の小さなファイルで、許可される形式、サイズ超過、検査不能、別の会社からの取得、期限後の扱いを確認する計画を作ります。対象を特定せず実サイトへファイルを送る検証は行いません。完了条件は、保存に成功したことだけでなく、未検査を利用できず、許可した役割だけが使え、期限の終わりを説明できることです。

SONAEの点検・運用提案。架空例。

ファイルの状態が変わる瞬間を確認する

架空の経費受付では、受信直後の識別子から検査前のファイルを取得できないことを受入へ置きます。検査待ちのまま処理が停止した場合、再送された同じ申請、期限切れ後の取得、別会社の参照を別々に計画します。削除を行うときは、原本、変換物、プレビュー、検査用複製がどこにあるかを対応させます。記録にはファイル本文を残さず、識別と状態、結果、時刻を必要な範囲で使います。ここでは実ファイルを受信しておらず、図中の隔離や検査が実システムで動作したという意味ではありません。担当者は利用する保存・配信基盤に合わせて期待結果を確定してください。

SONAEの点検・運用提案。架空例。

架空環境での受入計画

以下は未実行の計画です。実測の合格記録ではありません。

受信直後の取得
条件:検査状態は待ち
期待結果:配信を許可しない
検査が時間切れ
条件:結果が存在しない
期待結果:保留・再確認へ進む
別会社からの取得
条件:識別子だけを知る利用者
期待結果:所有者・権限で拒否
期限後の終了
条件:原本と変換物が存在
期待結果:保留条件を含め所在を照合

社内で使う確認票

SONAEの運用案・架空例。秘密の値を記入しないでください。

用途
架空:経費の画像とPDF/許可形式・量
状態
受付・検査・保留・許可・削除
利用
閲覧者・変換・AI連携・複製の所在
受入
拒否・検査不能・別会社・期限後

完了前のチェック

  • 利用者の申告形式だけで許可しない
  • 保存先と配信を実行領域から分ける
  • 検査不能は許可へ進めない
  • 配信・変換・削除まで所有者を追う

一次資料と確認範囲

資料の対象条件と掲載内容を確認して構成した記事です。顧客への接続や攻撃再現はしていません。資料の改訂を自動追従するものではありません。実施直前に公式資料と配布元の最新案内を再確認してください。