緊急PHP2Shell(CVE-2026-109618 / 109619)公表から1日/PHP 8.1 以前は修正版なし今すぐ診断
  1. ホーム
  2. ブログ
  3. PHP のセキュリティ

PHP のファイルアップロードの脆弱性と対策|乗っ取りを防ぐ5つのこと

公開
著者
編集部

PHP のファイルアップロードは、乗っ取りの入り口になりやすい。置き場所・名前・形式の確かめ方など、防ぐための基本をまとめた。

ファイルのアップロードは、サイトの乗っ取りの入り口になりやすい。PHP のファイルを置かれて実行されると、PHP2Shell と同じように、サーバー上で好きなプログラムを動かされてしまう。

この記事の要点
  • アップロードされたファイルは、Web から直接開けない場所に置く
  • ファイル名は付け直す(送られてきた名前を使わない)
  • 形式は拡張子ではなく、中身(finfo)で確かめる
  • 置き場所では PHP を実行させない
  • 大きさの上限を決める

防ぐための5つのこと

すること理由
Web から見えない場所に置く置かれたファイルを URL で開かれないため
名前を付け直す../ などで別の場所に書かれるのを防ぐため
中身で形式を確かめる拡張子だけ変えた PHP のファイルを弾くため
置き場所で PHP を実行させない万一置かれても動かないようにするため
大きさの上限を決めるサーバーを埋められないため

PHP での書き方の要点

  • 受け取ったファイルは move_uploaded_file() で移す
  • 形式は finfo_file() で MIME タイプを調べ、許す形式だけを通す
  • 名前は bin2hex(random_bytes(16)) などで作り、拡張子は許す形式から付ける
  • upload_max_filesize と post_max_size で大きさの上限を決める
WordPress の uploads に PHP のファイルがあったら

wp-content/uploads は画像などの置き場で、PHP のファイルは普通は無い。あれば改ざんを疑う。

PHP2Shell とのつながり

PHP2Shell の応急処置の1つは session.upload_progress.enabled=0。アップロードの進み具合を扱う機能が、攻撃に使われるためだ。アップロードの機能は、PHP 本体の側でも狙われやすい。

よくある質問

拡張子で画像だけに絞れば、安全ですか?

安全ではありません。
拡張子は簡単に変えられます。
finfo で中身を確かめ、名前も付け直してください。

アップロードの置き場所で PHP を止めるには?

Web サーバーの設定で、その場所では PHP を実行しないようにします。
そもそも Web から開けない場所に置くのがいちばん確実です。

無料ツールPHP2Shell 脆弱性チェッカーPHP のバージョンとサーバー会社を選ぶだけで、危険度と今やることが分かります。

参考にした情報

この記事の情報

2026年10月22日時点の公開情報にもとづく。最新は各公式のページを確認すること。

URL を入れるだけで、PHP2Shell の危険度と今やることが分かる。移行の相談もできる。

無料で診断する

この記事の著者

編集部