ホームページ バックエンド開発 PHPチュートリアル PHP_PHP チュートリアルを使用したインテリジェントなファイル タイプ検出の実装コード

PHP_PHP チュートリアルを使用したインテリジェントなファイル タイプ検出の実装コード

Jul 21, 2016 pm 03:26 PM
php コード 使用 利用 サフィックス そして 成し遂げる 私たち 書類 知的 検出 タイプ

ファイル接尾辞と MIME タイプ検出を使用する
通常、ファイル タイプを厳密に制限したい場合は、単純に $_FILES['myFile']['type'] を使用してファイルの MIME タイプを取得し、それが MIME タイプであるかどうかを確認します。正当なタイプ。
または、ファイル名の最後の数文字を取得してファイルの接尾辞を取得することもできますが、残念ながら、これらの方法では十分ではなく、ファイルの拡張子を簡単に変更してこの制限を回避できます。さらに、MIME タイプ情報はブラウザによって送信され、すべてではないにしても、ほとんどのブラウザはファイル拡張子に基づいて MIME タイプ情報を提供します。したがって、拡張子と同様に、MIME タイプは簡単に偽装される可能性があります。
「マジック バイト」の使用
ファイル タイプを判断する最良の方法は、「マジック バイト」として知られるファイルの最初の数バイトを調べることです。マジック バイトは基本的に、ファイル ヘッダーまたはファイルの末尾にある 2 ~ 40 バイトのさまざまな長さの署名です。ファイルの種類は何百もあり、そのうちのかなりの数のファイルには、複数のファイル署名が関連付けられています。ここでファイル署名のリストが表示されます。
怠惰な方法は、PHP 5.3.0 ではデフォルトで有効になっている fileinfo 拡張子を使用することです (公式マニュアルによると)。有効になっていない場合は、自分で有効にすることができます
たとえば、Windows の場合:

コードをコピーします コードは次のとおりです:

extension=php_fileinfo.dll


Linuxの場合:
コードをコピーします コードは次のとおりです:

extension=file info.so
#正しく動作しない場合は、以下を追加してください
#mime_magic.magicfile =/usr/share/file/magic


Windows で正しく動作しない場合:
以下を参照してください: http://www .php.net/manual/ja/fileinfo.installation.php#82570
file-5.03 -bin.zip をダウンロードして解凍すると、共有ディレクトリに magic.mgc と magic の 2 つのファイルがあります。
次に、マジック ファイルを指す MAGIC という名前のシステム環境変数を追加します。 D:softwarePHPextrasmiscmagic など
コードをコピーします コードは次のとおりです。
return $finfo- >buffer($buffer);
}
$mime_type = getFileMimeType($file);
switch($mime_type) {
case "image/jpeg":
// ここにアクションが入ります...
}



画像アップロードの処理

画像アップロードのみを許可する予定の場合は、組み込みの getimagesize() 関数を使用して、ユーザーが実際に有効な画像ファイルをアップロードしていることを確認できます。ファイルが有効な画像ファイルでない場合、この関数は false を返します。


コードをコピーします

コードは次のとおりです:
// ファイル入力フィールドの name 属性が myfile であると仮定します $tempFile = $_FILES['myFile']['tmp_name'] / / アップロード中に PHP によって作成される一時ファイルのパス $imginfo_array = getimagesize($tempFile); // 有効な画像ファイルでない場合は false を返します
if ($imginfo_array !== false) {
$mime_type = $imginfo_array[ 'mime'];
switch ($mime_type) {
case "image/jpeg":
// ここにアクションが入ります...
}
}
else {
echo "これは有効な画像ファイルではありません";


手動による「マジック バイト」の読み取りと解釈
何らかの理由で FileInfo 拡張子をインストールできない場合でも、ファイルの最初の数バイトを読み取り、既知の関連バイトと比較することで、手動で判断できます。特定のファイル タイプの場合は、ファイル タイプです。正規のファイル形式にいくつかの不正なマジック バイトが関連付けられている可能性もあるため、このプロセスには多少の試行錯誤が必要だったはずです。
ただし、不可能ではありません。数年前、実際の mp3 ファイルのみをアップロードできるスクリプト ファイルを作成するように依頼されました。当時は Fileinfo を使用できなかったので、これに頼るしかありませんでした。手動検出方法
I 一部の MP3 ファイルの不正なマジック バイトを解析するのに時間がかかりましたが、すぐに安定したアップロード スクリプトを入手しました。
この記事を終える前に、警告をしておきます。アップロードされたファイルをインクルードするために include() を決して呼び出さないようにしてください。PHP コードは画像内に巧妙に隠されている可能性が高く、画像は正常に渡される可能性があるためです。ファイル検出を通じてそのようなスクリプトが実行されると、システムに損傷を与えるだけです。
翻訳元: http://designshack.co.uk/articles/php-articles/smart-file-type-detection-using-php/

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/324061.html技術記事ファイル接尾辞と MIME タイプ検出の使用 通常、ファイル タイプを厳密に制限したい場合は、単純に $_FILES['myFile']['type'] を使用してファイルの MIME タイプを取得し、それが...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles