最新のWPアップデート以降、SVGファイルがアップロードされない


16

関数のPHPファイルに、SVGファイルをアップロードできるスニペットがあります。今日WPの最新バージョンにアップグレードして以来、svgをアップロードできなくなりました。また、CSSトリックのWebサイトから2番目のコードスニペットを試しましたが、それも機能しません。

誰もがa)最後のアップデートでこれを引き起こした可能性があるものを知っていますか?b)誰かが回避策を知っていますか?

私が通常使用するコードは次のとおりです。

function svg_mime_types( $mimes ) {
   mimes['svg'] = 'image/svg+xml';
   return $mimes;}
add_filter( 'upload_mimes', 'svg_mime_types' );  

どうもありがとう

ポール。

回答:


16

WordPress 4.7.1 では、アップロードされたファイルの実際のMIMEタイプをチェックする変更が導入されました。これにより、SVGやDOCXなどのファイルタイプのアップロードが中断されます。WordPress Coreにはこの問題のチケットが既に存在します。詳細については、こちらをご覧ください。

一時的な(この問題が修正されるまでの時間)と推奨回避策は、以下のプラグインです:
無効に実MIMEチェック

そのプラグインを使用したくない場合、同じ機能があります。

add_filter( 'wp_check_filetype_and_ext', function($data, $file, $filename, $mimes) {
    global $wp_version;

    if ( '4.7.2' !== $wp_version ) {
       return $data;
    }

    $filetype = wp_check_filetype( $filename, $mimes );

    return [
        'ext'             => $filetype['ext'],
        'type'            => $filetype['type'],
        'proper_filename' => $data['proper_filename']
    ];

}, 10, 4 );

これには、WordPressが更新されるとすぐに修正を無効にするためのバージョンチェックが含まれていることに注意してください。

編集

この問題は当初、4.7.2で修正されるように設定されていました。しかし、4.7.2は緊急のセキュリティリリースであったため、修正プログラムはそのバージョンには含まれませんでした。4.7.3で修正される予定です。


2
開発環境の代替回避策:に追加define( 'ALLOW_UNFILTERED_UPLOADS', true );wp-config.phpます。これは本番環境では安全ではありません。
ティムマローン

1
すべての情報を1か所で収集するために、関連するフォーラムスレッドもあります。wordpress.org
ティムマローン

これをありがとう。現時点では緊急の状況ではありませんが、回避策があることを知っておくと便利です。非常に高く評価。
Paul12_

それがために特別にチェックしない限り、広すぎる影響を及ぶ発表'svg' === strtolower($filetype['ext']);何ら作業は必要ありません(ほとんど)、またはファイルがタイプSVGでない場合でより多くの仕事をして紹介...
MrMesees


2

誰もが何をしているのかだけで働いているようではなく、それはあまりにも悪いので、ここで私が扱った方法は...

歴史/背景

2015年に、CSS-Tricksの記事に基づいてSVGアップローダーを作成しました。また、画像プレビューでグリッドが機能するようになり、他のいくつかの修正を使用しました。シンプルなプラグイン(IMOファイルタイプのプラグインはシンプルでなければなりません)

解決

4.7にはいくつかの変更がありました。本当のPITAは、image/MIMEタイプではWPが画像にGDを使用するようになったことです。これをバイパスするには、svg使用する拡張子を設定して、application/svg+xmlGDがファイルを混乱させないようにします。

更新: 4.7.2の時点で、一部の明るい火花もそれを壊した場合がありました

その後、フックを介して、それをホットワイヤに戻しimage/svg+xmlます。他の回答で使用されているものと同じですが、最初に特定のケースにロックダウンして、効果を排除します(SVGファイルですか)。読み取りに頼ることができます$data['ext'](1回の比較と1回の配列/ハッシュアクセスとしてファイル情報を取得するには、関数よりも安価である必要があります)。

アップデート: 4.7.2のよう$data['ext']常にセットされていない、今の長さは、使用して、ファイル名から<1つの抽出物(潜在的に危険な)拡張子がある場合、私たちはそう strtolower(end(explode('.', $filename)))。私がFileInfoを使用して実際に戦っている理由は、基本的にPHP拡張機能に依存することは不透明すぎて、すべての人にとって常に機能するとは限らないことです(特に、拡張機能がない場合は、拡張機能を有効または無効にコンパイルする場合はそうではありません)。拡張機能の範囲内で機能するものが欲しい。正しい情報を持っていることはもはや問題ではないので、出力を信頼しFileInfo、拡張子を持っている人(5.6+ではデフォルトだと思います)が機能するはずです。また、これはプラグインであるため、コアを変更することはないため、このコードをオフにしたり、フックを登録解除したりできます。

https://github.com/Lewiscowles1986/WordPressSVGPlugin

見る

その他の回避策

フィルタリングされていないアップロードを許可することは恐ろしい解決策です。他の人がこのスレッドにリンクすると言ったように、人々はメディアアップローダーを介してPHPファイルをアップロードできるからです(それは悪いことです。

チェックなしですべてのファイルを関数に強制します(皮肉なことimage/に、MIMEタイプを使用している場合、単純なextチェックを使用することはできません)。これにより、比較的ニッチな問題を解決するためにはるかに広い範囲の効果を作成する可能性があり、全体的な作業が増えます(プラグインは、管理ユーザーが管理メディアUIを機能させるための作業も多くなります)

mimeをapplication / svg + xmlのままにして、mimeタイプを単純にフィルタリングすると、画像はアップロードされますが、機能イメージなどとして使用するには修正が必要になります。慎重に戦いを選びます。

お役に立てれば。


まあ、この全体を駆動する中心的な問題は、アップロードされたファイルが公開される前にモデレーションがないという事実です。ファイルが基本的にその拡張子に基づいて悪であるかどうかを推測しようとすることは、常に悪い考えです。理論的には、管理者によるすべてのアップロードを許可しても問題はないため、提案された修正の一部は一般的に広すぎるかもしれませんが、実際には多くの人にとっては十分かもしれません。サイドノートIMHO SVGはPDFと同じくらいの画像ですが、技術的にはそうではありません。
マークカプルン

mimeタイプを思いついた人は誰でもあなたと意見が一致しません。世界中のブラウザベンダーやソフトウェアプロデューサーもそうです。WordPressは拡張機能のみをチェックします。これは、ネットワークセキュリティの一部として意図されたものではなく、それで問題ないためです(同じ理由で、Microsoft Officeは車を駐車しません)。少なくともWPは表面的なことよりもはるかに多くのチェックを行うべきだと言っているが、WPがその作業に適切な手段であるというわけではないことに同意します(
現状で

実際にブラウザーは、すべての種類の状況でコンテンツの検査を行いますdeveloper.mozilla.org/en-US/docs/Mozilla / ...そして、彼らは拡張子を決して見ません。そして、はい、この時点でワードプレスがセキュリティの強化に焦点を当てるとは誰も期待していません;)
マークカプルン

まず、1つのブラウザーの1つのブログ記事!=すべてのブラウザー。Chromeはmimeに注意を払っていることを知っています。次に、ファイルのイントロスペクションはルールに従います。緩やかな言語が示唆するように、それは自由形式ではありません。より包括的な検証では、パフォーマンスと柔軟性が犠牲になります(マルチユーザーの公募ではなく、単一のPCレベルのクライアントで機能します)。このFirefoxが開かれていることを証明するために、100個のタブを開いてメモリとCPU使用率を確認します。ウェブサイトの100リクエストで同じことを試してください!最後に、余談ではなく追加すべき実際の事実がない限り、停止してください。それは非常に悪化しており、誰にも利益はありません。
MrMesees

アップロードしたばかりのファイルの最初の256バイトを検査すると、ファイルはおそらくメモリまたはSSDキャッシュにあるため、パフォーマンスヒットはほとんどゼロになります。ファイルのサイズ変更、サムネイルの生成、およびありません。他のブラウザについては、まったく同じではないコードの流れで、これからstackoverflow.com/questions/1201945/...そのクロムを想定しこじつけされていないとFirefoxは非常に並んでいる
マーク・Kaplun
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.