WordPress「申し訳ありません。このファイルタイプは、セキュリティ上の理由により許可されていません」の解決法 (2026年版)
結論: このエラーは、WordPressがファイル拡張子またはMIMEタイプを許可された形式の1つとして認識しなかったことを意味します。最もクリーンな恒久的修正は、functions.php またはカスタムプラグインに小さな upload_mimes フィルタを追加することです。iPhoneのHEIC写真をアップロードする場合、最もシンプルな道は SnapPress のようなツールを使用してアップロード前にデバイス上でJPEGに変換することです。wp-config.php の ALLOW_UNFILTERED_UPLOADS を恒久的な修正として有効化してはいけません。WordPressの全てのアップロード安全性チェックを無効化します。
WordPressで「申し訳ありません。このファイルタイプは、セキュリティ上の理由により許可されていません」に遭遇したのは、あなただけではありません。世界で最も検索されているWordPressエラーメッセージの1つであり、その文言は誤解を招きます。WordPressは悪意あるものを検出していません。単にハードコードされた許可リストに当たっただけで、ファイル拡張子またはMIMEタイプがリストにないだけです。
このガイドでは、なぜエラーが発生するか、4つの本番運用テスト済みの恒久的修正方法、各アプローチのセキュリティトレードオフ、ファイルタイプごとの具体的な解決策を解説します。読み終える頃には、どの方法があなたの状況に適合するか、その過程でサイトを壊さない方法がわかります。
このエラーが発生する理由 (MIMEタイプ許可リスト)
WordPressの全てのアップロードは wp_check_filetype_and_ext() 関数を通過します。この関数は、2つの項目をハードコードされた許可リストと比較します:
- ファイル拡張子(ファイル名のドットの後の部分)
- PHPの
finfo拡張機能が検出したMIMEタイプ
これらのいずれかが get_allowed_mime_types() が返すリストにない場合、アップロードは「申し訳ありません。このファイルタイプは、セキュリティ上の理由により許可されていません」と拒否されます。リストは wp-includes/functions.php で定義されており、デフォルトで約60エントリ(一般的な画像、ビデオ、オーディオ、アーカイブ、ドキュメント形式)が含まれています。
「セキュリティ」の枠組みが存在するのは、許可リストの本来の理由が、攻撃者が実行コード(PHPファイル、シェルスクリプト)をアップロードし、WordPressがそれをURLとして提供することを防ぐためだったからです。その狭い意味では、フィルタは実際のセキュリティ境界です。しかし、同じフィルタが、コアリストに単に含まれていなかった正当な形式の長いリストをブロックします:
- HEIC iPhone (WordPress 6.7 で追加、2024年末)
- WebP (WordPress 5.8 で追加、2021年)
- AVIF (WordPress 6.5 で追加、2024年3月)
- SVG (未追加 — プラグインまたはフィルタが必要)
- WOFF/WOFF2 フォント (未追加)
- STL、OBJ、GLB 3Dモデル形式 (未追加)
WordPressバージョンが特定の形式の追加よりも古い場合、または新しいMIMEタイプを除外するカスタムビルドを実行しているホストの場合、サポートされているはずの形式でもエラーが発生します。
一時的な解決: まず拡張子とファイルを確認
サーバー設定を変更する前に、2つの単純な原因を除外してください:
拡張子が間違っているか欠落している
メッセージアプリからエクスポートされたファイルは、拡張子を失ったり、.bin のような汎用的なものを取得したりすることがあります。ファイルを右クリックし、正しい拡張子(.jpg、.png など)に名前を変更して、再度アップロードを試みてください。成功すれば、ファイル内容は問題ありませんでした。拡張子だけが問題でした。
ファイルが破損している
ブラウザがチャットまたはメールからファイルをダウンロードし、ダウンロードが中断された場合、ファイルが切り詰められている可能性があります。PHPの finfo は誤ったMIMEタイプを検出します。ファイルは画像ではなくバイナリのゴミのように見えます。ソースから元のものを再ダウンロードして再試行してください。
これら2つのチェックは30秒で済み、私が見る「このファイルタイプは許可されていません」レポートの約20%を解決します。残りの80%は、以下の恒久的修正のいずれかが必要な実際の許可リストの問題です。
4つの恒久的修正
修正1: upload_mimes フィルタ経由でMIMEタイプを追加 (推奨)
これは最もクリーンな本番修正です。以下を子テーマの functions.php、より良くは、テーマ更新でも変更が生き残るように小さなカスタムプラグインに追加します:
<?php
add_filter('upload_mimes', function($mimes) {
$mimes['heic'] = 'image/heic';
$mimes['heif'] = 'image/heif';
return $mimes;
});
add_filter('wp_check_filetype_and_ext', function($data, $file, $filename, $mimes) {
$filetype = wp_check_filetype($filename, $mimes);
if (in_array($filetype['ext'], ['heic', 'heif'], true)) {
$data['ext'] = $filetype['ext'];
$data['type'] = $filetype['type'];
}
return $data;
}, 10, 4); heic と image/heic を、必要な拡張子とMIMEタイプに置き換えてください。最初のフィルタは、タイプを許可リストに追加します。2番目のフィルタは微妙なバグを処理します: 多くのサーバーで、PHPの finfo が珍しいMIMEタイプを application/octet-stream として報告するため、拡張子が許可されていても wp_check_filetype_and_ext() がアップロードを拒否します。2番目のフィルタは、ファイル拡張子が一致する場合、認識を強制します。
HEICに特化したより深いウォークスルーについては、WordPress で HEIC を許可する MIME types 設定完全ガイド (2026年版) を参照してください。
修正2: プラグインを使用 (WP Add Mime Types)
PHPを編集したくない場合、WP Add Mime Types プラグイン(無料、8万以上のインストール、2014年から活発にメンテナンス)が、拡張子とMIMEタイプの2列の設定パネルを提供します。行を追加、保存、完了。プラグインは内部で同じ upload_mimes フィルタを実行します。
本番運用テスト済みの2つの代替案:
- File Upload Types by WPForms — HEIC、WebP、AVIF、SVG、その他40以上の形式のプリセットエントリを持つチェックボックス駆動UI。MIMEタイプ文字列をすぐに思い出せない場合に最適。
- Disable Real MIME Check — PHPの
finfo検証ステップをオフにする単機能プラグイン。拡張子が許可リストにあるがfinfoがMIMEタイプを誤報告するエッジケースで便利。控えめに使用してください。トレードオフは、より弱い検証です。
修正3: wp-config.php ALLOW_UNFILTERED_UPLOADS (上級者向け、要警告)
WordPressには wp-config.php のエスケープハッチがあります:
define('ALLOW_UNFILTERED_UPLOADS', true); この定数を設定すると、管理者はPHPスクリプトを含むあらゆるファイルタイプをアップロードできます。全てのMIMEタイプチェックはバイパスされます。
本番環境では絶対に使用しないでください。この定数はWordPressの全アップロード安全性チェックをオフにします。任意の管理者レベルのアカウントを侵害した攻撃者は、PHPファイルを直接 wp-content/uploads にアップロードして実行できます。今日は安全に見えるセットアップでも、古いプラグインやインポートから忘れられた「管理者ロール付き購読者」アカウントがあることがよくあります。
唯一の正当な用途は、アップロード動作をデバッグしているローカル開発環境です。ステージングにプッシュする前にコメントアウトしてください。
修正4: SnapPressでデバイス上で変換 (iPhoneユーザー向け)
特にiPhone写真のアップロードについて、最も回復力のある修正は、ファイルがサーバーに到達する前にデバイス上でHEICをJPEGに変換することです。SnapPress は、Photosライブラリから HEIC を読み込み、AppleがiOSリリース全体で維持するiOS画像パイプラインを使用してデコードし、REST API 経由でWordPressメディアライブラリにJPEGをアップロードします。
functions.php は触りません。upload_mimes フィルタは触りません。サーバーに到達するファイルは、2003年以来全てのWordPressインストールがサポートしてきた標準のJPEGです。
これは、複数のWordPressサイトを管理する人、またはPHPの編集に不安がある人に推奨する道です。トレードオフは、これがiPhone HEICのケースのみを解決することです。他のファイルタイプには、修正1-3のいずれかが必要です。
ファイルタイプ別の解決策
正確なMIMEタイプが重要です。以下は、「申し訳ありません。このファイルタイプは、セキュリティ上の理由により許可されていません」に当たる最も一般的な形式の本番運用テスト済みエントリです。
HEIC (iPhone写真)
$mimes['heic'] = 'image/heic';
$mimes['heif'] = 'image/heif'; 常に両方を追加してください。iPhoneは画像シーケンスやバーストで .heif ファイルを生成することがあります。フィルタを追加すると、WordPressのアップロードは完了します。しかし、ほとんどの訪問者のブラウザはHEICを描画できないため、サーバーサイド変換(ShortPixel)またはクライアントサイド変換(SnapPress)も必要です。完全なストーリーについては iPhoneのHEIC写真をWordPressにアップロードする方法 を参照してください。
WebP
$mimes['webp'] = 'image/webp'; WordPress 5.8(2021年中頃)は WebP をコア許可リストに追加しました。WordPressバージョンが最新なら、このフィルタは不要です。古いビルドや、カスタム制限のあるホストにいる場合、フィルタが WebP アップロードのブロックを解除します。
SVG
$mimes['svg'] = 'image/svg+xml';
$mimes['svgz'] = 'image/svg+xml'; フィルタで止まらないでください。SVGはXMLで、管理者ブラウザで発火するインラインJavaScriptを含む可能性があります。常に Safe SVG プラグイン(無料)をインストールしてください。SVGを許可し、svg-sanitizerライブラリを通じて受信ファイルをサニタイズし、scriptタグ、イベントハンドラー、外部エンティティ参照を削除します。信頼できるデザイナーのみがSVGをアップロードする場合は、フィルタを current_user_can('manage_options') チェックでラップしてください。
AVIF
$mimes['avif'] = 'image/avif'; WordPress 6.5(2024年3月)は AVIF をコア許可リストに追加しました。フィルタは古いインストールやカスタムホストでのみ必要です。AVIFは同等の知覚品質でHEICより約20%小さく圧縮され、より広いブラウザサポートを持つため、サーバーにlibavifがあれば、より良い配信形式です。
MP4 ビデオ
$mimes['mp4'] = 'video/mp4';
$mimes['m4v'] = 'video/mp4';
$mimes['mov'] = 'video/quicktime'; これらは通常コア許可リストにありますが、特にMP4でエラーが発生する場合、ファイルのMIMEタイプが video/x-m4v または application/octet-stream として検出されているためです。修正1の wp_check_filetype_and_ext フィルタを追加して、認識を強制してください。
ZIP アーカイブ
$mimes['zip'] = 'application/zip';
$mimes['7z'] = 'application/x-7z-compressed'; ZIPはデフォルトでコア許可リストにありますが、一部のセキュリティプラグイン(Wordfence、Sucuri)はZIPが実行可能コンテンツを含む可能性があるため、それを上書きします。WordPressフィルタだけでなく、プラグイン設定でもホワイトリストに追加してください。
セキュリティ考慮 (なぜデフォルトで制限されているか)
WordPressがデフォルトでファイルタイプを制限するのは、1つの中心的な理由のためです: wp-content/uploads 内のPHPファイルは、ほとんどのサーバー構成でコードとして実行できます。WordPressがあらゆるファイル拡張子を受け入れた場合、任意の著者または寄稿者アカウントを侵害した攻撃者は、.php シェルをアップロードし、そのURLを叩いて、サーバー上で任意のコードを実行できます。
許可リストは最も安価な防御です。他の全てのセキュリティレイヤー(パスワードの再利用、プラグインの脆弱性、サプライチェーンの侵害)が失敗しても、アップロードフィルタはPHPが uploads ディレクトリに到達することを止めます。
許可リストへの追加時の3つの原則:
- 実際に必要なものだけを追加する。月に1回HEICをアップロードするなら、HEICを追加。必要かもしれない全ての形式を予防的に許可しないでください。
- PHP、実行可能、スクリプト拡張子を絶対に許可しない。
.php、.phtml、.exe、.sh、.cgi、.pl— どれもいかなる状況でもwp-content/uploadsに属しません。 - 埋め込みコンテンツを許可する形式をサニタイズする。SVG(JavaScript)、PDF(JavaScriptアクション)、HTML(全て)。サニタイズプラグインを使用するか、アップロード時に平らな画像形式に変換してください。
修正1が機能しない場合のエラー診断
フィルタを追加し、ファイルをアップロードしたのに、まだ「申し訳ありません。このファイルタイプは、セキュリティ上の理由により許可されていません」が表示されます。3つを確認してください:
フィルタが間違った場所にある
フィルタを含むファイルが実際に読み込まれていることを確認してください。子テーマの functions.php に入れたが、親テーマがアクティブな場合、スニペットは実行されません。テーマ依存を削除するために、カスタムプラグインに移動してください。
セキュリティプラグインが許可リストを上書きしている
Wordfence、Sucuri、iThemes Security、および類似のプラグインは、WordPressコアの上に独自のアップロード検証を追加します。upload_mimes フィルタだけでなく、セキュリティプラグイン設定でもMIMEタイプをホワイトリストに追加してください。
PHP finfo が間違ったMIMEタイプを報告している
これが最も一般的なサイレント障害です。ファイル拡張子は許可リストにありますが、PHPの finfo モジュールは期待されるMIMEタイプの代わりに application/octet-stream を返します。WordPressは不一致を見て拒否します。修正1の wp_check_filetype_and_ext フィルタがこのケースを処理します。upload_mimes フィルタと一緒に含まれていることを確認してください、別々ではなく。
WordPressアップロード障害のより広い診断チェックリストについては、WordPressで画像がアップロードできないときの対処法8選 を参照してください。
iPhone写真アップロード: このエラーを完全に回避するワークフロー
上記は全て、生のHEIC、SVG、AVIF、その他の形式を直接WordPressメディアライブラリにアップロードするためです。特にiPhone写真ワークフローには、よりシンプルな道があります: アップロード前にデバイス上で変換する。
SnapPress は Photosライブラリから HEIC を読み込み、Appleが各iOSリリースで維持・更新するiOS画像パイプラインを使用してデコードし、REST API 経由でWordPressメディアライブラリにJPEGをアップロードします。到達するファイルが標準JPEGなので、「申し訳ありません。このファイルタイプは、セキュリティ上の理由により許可されていません」を二度と見ることはありません。このサイトでも、接続する他のWordPressサイトでも。
iPhoneからWordPressへのバルク公開ワークフローについては、スマホからWordPressに画像を一括アップロードする完全ガイド の比較と、WordPressの写真アップロードアプリ5選を比較 のアプリまとめを参照してください。
まとめ
- このエラーは、ファイル拡張子またはMIMEタイプが、
get_allowed_mime_types()が返すWordPress許可リストにないことを意味します。 - 最もクリーンな修正: カスタムプラグインに
upload_mimesフィルタを追加(修正1)。 - ノーコード修正: WP Add Mime Types または File Upload Types プラグイン(修正2)。
- 絶対に恒久修正として使わない:
wp-config.phpのALLOW_UNFILTERED_UPLOADS(修正3)。 - iPhone HEICワークフロー: SnapPressでデバイス上で変換し、WordPressに到達する前にファイルをJPEGにする(修正4)。
iPhone写真を定期的にWordPressに公開する場合、デバイス上変換パスはこのエラークラスを完全に排除します。SnapPressを無料で開始、SnapPress Connect WordPressプラグイン 経由で接続すると、次回共有シートで写真を選択すると、フィルタなし、プラグインなし、サーバーの wp-config.php 変更なしでJPEGとしてアップロードされます。
よくある質問
なぜWordPressは特定のファイルタイプをブロックするのですか?
WordPressは全てのアップロードを wp_check_filetype_and_ext() を通じて、get_allowed_mime_types() が返すハードコードされた許可リストで検証します。「セキュリティ上の理由」メッセージは、ファイル拡張子またはMIMEタイプがそのリストにないことを意味します。本来の目的は、攻撃者が画像に偽装した実行可能PHPファイルをアップロードするのを防ぐことでしたが、同じフィルタが、WordPressバージョンのリリース時にコアリストに含まれていなかったHEIC、AVIF、SVGなどの正当な形式もブロックします。修正は、フィルタ経由でMIMEタイプを追加するか、アップロード前にファイルを許可された形式に変換することです。
カスタムファイルタイプを許可するのは安全ですか?
ほとんどの場合「はい」ですが、選択的にしてください。画像形式(HEIC、AVIF、WebP)とメディアコンテナ(MP4、MOV)は upload_mimes フィルタに追加しても安全です。コードとして実行できないからです。SVGは、XMLでありインラインJavaScriptを含む可能性があるため注意が必要な唯一の画像形式です。SVGを許可する場合は、Safe SVGのようなサニタイズプラグインも必ずインストールしてください。wp-config.php の ALLOW_UNFILTERED_UPLOADS を恒久的な修正として使用しないでください。その定数は、PHPの直接アップロードをブロックするものを含め、WordPressの全てのアップロード安全性チェックを無効化します。
PHPフィルタとプラグインのどちらが良いですか?
あなたが管理する1〜2個のMIMEタイプには、子テーマの functions.php または小さなカスタムプラグイン内の upload_mimes フィルタが最もクリーンです。5行、プラグインオーバーヘッドなし、プラグインパスを使用すればテーマ更新でも生き残ります。5つ以上のファイルタイプ、またはPHPを編集しないユーザーには、WP Add Mime TypesやFile Upload Typesのようなプラグインが正解です。両方とも内部で同じWordPressフィルタを実行するため、パフォーマンスへの影響は同じです。速度ではなく、コード編集が快適かどうかで選んでください。
iPhoneからのHEICファイルを許可する方法は?
このスニペットを functions.php またはカスタムプラグインに追加してください: upload_mimes に対するフィルタで 'heic' => 'image/heic' と 'heif' => 'image/heif' を追加するものです。WordPress 6.7はHEICをコアの許可リストに追加したので、新しい6.7+インストールではこのフィルタは既に不要かもしれません。しかし、多くの共有ホストは新しいMIMEタイプを除外するカスタムWordPressビルドを出荷しています。iPhone写真の賢い道は、SnapPressのようなツールでデバイス上でJPEGに変換し、サーバーに到達するファイルが、WordPressインストールが拒否したことがない標準JPEGになるようにすることです。
SVGファイルを安全に許可する方法は?
image/svg+xml を upload_mimes フィルタに追加するだけにしてはいけません。SVGはXMLで、管理者ブラウザで発火するインラインJavaScriptや外部参照を含む可能性があります。SVG MIMEタイプを許可し、svg-sanitizerライブラリを通じて受信ファイルをサニタイズして、scriptタグ、イベントハンドラー、外部エンティティ参照を削除する Safe SVG(無料プラグイン)をインストールしてください。信頼できるデザイナーのアップロードにのみSVGが必要な場合、フィルタを current_user_can('manage_options') チェックと組み合わせることで、SVGを管理者に制限することもできます。
functions.php の編集でサイトが壊れた場合はどうすればよいですか?
まず、パニックにならないでください。白い画面はほぼ常に、追加したスニペットのセミコロンの欠落または一致しないブラケットです。SFTPまたはホスティングのファイルマネージャー経由で接続し、wp-content/themes/your-theme/functions.php を編集し、壊れたスニペットを削除して保存すると、サイトが復活します。ファイルを編集できない場合、全てのホストのコントロールパネルに「ワンクリックPHPエラーログ」または「テーマリセット」オプションがあります。今後は、子テーマ経由で functions.php を編集するか、より良くは、コードエラーがプラグイン1つを無効にするだけでサイト全体を壊さないように、カスタムフィルタを小さなカスタムプラグインに入れてください。