ホームページ バックエンド開発 PHPチュートリアル 利用PHP实现智能文件类型检测的实现代码_php技巧

利用PHP实现智能文件类型检测的实现代码_php技巧

May 17, 2016 am 09:16 AM
知的

使用文件后缀和MIME类型检测
通常我们想严格限制文件类型的时候,可以简单地用$_FILES['myFile']['type']  取得文件的 MIME类型然后来检测它是否是合法的类型。
或者我们可以取文件名的最后几个字符来获取文件后缀,不幸的是,这些方法并不足够,可以很容易地改变文件的扩展名绕过这个限制。此外,MIME类型信息是由浏览器发送的,而且,对于大多数浏览器,即使不是全部,是根据文件的扩展名的来给出MIME类型信息的!因此,MIME类型,就像扩展名一样,可以很容易地欺骗。
使用“魔术字节”
确定文件类型的最佳方法是通过检查文件的前几个字节 – 称为“魔字节”。魔术字节本质上是文件头中不同长度在2到40个字节之间的,或在文件末尾的签名。有上百个类型的文件,他们中相当多的文件类型有好几个文件签名与它们相关联。在这里你可以看到一个文件签名列表。
偷懒的办法是使用fileinfo扩展,PHP 5.3.0 默认是启用的(根据官方MANUAL),如果没有启用,你可以自己启用
如在windows下面:
复制代码 代码如下:

extension=php_fileinfo.dll


linux下面:
复制代码 代码如下:

extension=fileinfo.so
#如不能正常工作,再加上下面这条
#mime_magic.magicfile=/usr/share/file/magic


windows下面如不能正常工作:
可参考:http://www.php.net/manual/en/fileinfo.installation.php#82570
下载file-5.03-bin.zip ,解压出来,在其中的share目录有magic.mgc 、magic 两个文件。
然后添加一个名为MAGIC的系统环境变量指向magic 文件。如D:\software\PHP\extras\misc\magic  
复制代码 代码如下:

function getFileMimeType($file) {
$buffer = file_get_contents($file);
$finfo = new finfo(FILEINFO_MIME_TYPE);
return $finfo->buffer($buffer);
}
$mime_type = getFileMimeType($file);
switch($mime_type) {
case "image/jpeg":
// your actions go here...
}

处理图像上传
如果你打算只允许图像上传,那么你可以使用内置的getimagesize()函数,以确保用户实际上是上传一个有效的图像文件。如果该文件不是有效的图像文件,这个函数返回false。
复制代码 代码如下:

// 假设file input 域的name 属性为myfile
$tempFile = $_FILES['myFile']['tmp_name']; // path of the temp file created by PHP during upload
$imginfo_array = getimagesize($tempFile); // returns a false if not a valid image file
if ($imginfo_array !== false) {
$mime_type = $imginfo_array['mime'];
switch($mime_type) {
case "image/jpeg":
// your actions go here...
}
}
else {
echo "This is not a valid image file";
}

手动读取和解释“魔法字节”
如果由于某种原因,你不能安装FileInfo扩展,那么你仍然可以手动确定,通过读取文件的前几个字节,并比较它们与已知的魔法与特定文件类型相关联的字节的文件类型。这个过程肯定少许的试验和错误,因为还有一种可能,有少数非法的魔法字节与合法文件格式关联了。
然而这不是不可能的,几年前,我被要求做一个只允许真正的 mp3 文件上传的脚本文件,并且,当时我们不能用 Fileinfo, 我们只能依靠这种手动检测的方式了.
我花了一段时间来解析一些mp3文件的非法魔法字节,但很快,我得到了一个稳定的上传脚本。
在本文结束前,我想给大家一个警告: 确保你永远没有调用一个 include() 来包含一个上传的文件,因为PHP代码很可能会巧妙地隐藏在图片里面,并且图片也可以成功的通过你的文件检测,当这样的脚本运行时,只可能给系统带来破坏。
译自:http://designshack.co.uk/articles/php-articles/smart-file-type-detection-using-php/
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Windows 11 のスマート アプリ コントロール: オンまたはオフにする方法 Windows 11 のスマート アプリ コントロール: オンまたはオフにする方法 Jun 06, 2023 pm 11:10 PM

インテリジェント アプリ コントロールは、ランサムウェアやスパイウェアなど、データに損害を与える可能性のある不正なアプリから PC を保護する Windows 11 の非常に便利なツールです。この記事では、スマート アプリ コントロールとは何か、その仕組み、および Windows 11 でスマート アプリ コントロールをオンまたはオフにする方法について説明します。 Windows 11 のスマート アプリ コントロールとは何ですか? Smart App Control (SAC) は、Windows 1122H2 更新プログラムで導入された新しいセキュリティ機能です。 Microsoft Defender またはサードパーティのウイルス対策ソフトウェアと連携して、デバイスの速度を低下させたり、予期しない広告を表示したり、その他の予期しないアクションを実行したりする可能性のある不要なアプリをブロックします。スマートなアプリケーション

飛び回ったり、口を開けたり、見つめたり、眉毛を上げたりする顔の特徴をAIが完璧に模倣し、ビデオ詐欺を防ぐことは不可能 飛び回ったり、口を開けたり、見つめたり、眉毛を上げたりする顔の特徴をAIが完璧に模倣し、ビデオ詐欺を防ぐことは不可能 Dec 14, 2023 pm 11:30 PM

これほど強力なAIの模倣能力では、それを防ぐことは本当に不可能です。 AIの発展は今ここまで進んでいるのか?前足で顔の特徴を浮き上がらせ、後ろ足で全く同じ表情を再現し、見つめたり、眉を上げたり、口をとがらせたり、どんなに大袈裟な表情でも完璧に真似しています。難易度を上げて、眉毛を高く上げ、目を大きく開き、口の形も歪んでいるなど、バーチャルキャラクターアバターで表情を完璧に再現できます。左側のパラメータを調整すると、右側の仮想アバターもそれに合わせて動きが変化し、口や目の部分がアップになります。同じです(右端)。この研究は、GaussianAvatars を提案するミュンヘン工科大学などの機関によるものです。

数年後にはプログラマーが減少するということをご存知ですか? 数年後にはプログラマーが減少するということをご存知ですか? Nov 08, 2023 am 11:17 AM

「ComputerWorld」誌はかつて、IBM がエンジニアが必要な数式を書いて提出できる新しい言語 FORTRAN を開発したため、「プログラミングは 1960 年までに消滅するだろう」という記事を書きました。コンピューターを実行すればプログラミングは終了します。画像 数年後、私たちは新しいことわざを聞きました: ビジネスマンは誰でもビジネス用語を使って問題を説明し、コンピュータに何をすべきかを伝えることができます。COBOL と呼ばれるこのプログラミング言語を使用することで、企業はもはやプログラマーを必要としません。その後、IBM は従業員がフォームに記入してレポートを作成できるようにする RPG と呼ばれる新しいプログラミング言語を開発したと言われており、会社のプログラミング ニーズのほとんどはこれで完了できます。

MotionLM: マルチエージェント動作予測のための言語モデリング技術 MotionLM: マルチエージェント動作予測のための言語モデリング技術 Oct 13, 2023 pm 12:09 PM

この記事は自動運転ハート公式アカウントより許可を得て転載しておりますので、転載については出典元までご連絡ください。原題: MotionLM: Multi-Agent Motion Forecasting as Language Modeling 論文リンク: https://arxiv.org/pdf/2309.16534.pdf 著者の所属: Waymo 会議: ICCV2023 論文のアイデア: 自動運転車の安全計画のために、将来の動作を確実に予測するロードエージェントの数は非常に重要です。この研究では、連続的な軌跡を離散的なモーション トークンのシーケンスとして表現し、マルチエージェントのモーション予測を言語モデリング タスクとして扱います。私たちが提案するモデル MotionLM には次の利点があります。

自動運転におけるSLAM技術の応用について論じた記事 自動運転におけるSLAM技術の応用について論じた記事 Apr 09, 2023 pm 01:11 PM

自動運転において測位はかけがえのない位置を占めており、今後の発展が期待されています。現在、自動運転における測位はRTKと高精度地図に依存しているため、自動運転の実装には多大なコストと困難が加わります。想像してみてください。人間が運転するとき、自分自身の全世界の高精度測位や詳細な周囲環境を知る必要はありません。全地球的なナビゲーション パスを持ち、そのパス上の車両の位置を照合するだけで十分です。ここで必要なのは、 SLAM分野のキーテクノロジー。 SLAMSLAM (Simultaneous Localization and Mapping) とは何ですか。CML (Concurrent Mapping and Localiza) とも呼ばれます。

フーリエ知能万能ヒューマノイドロボット「GR-1」の予約販売が始まります! フーリエ知能万能ヒューマノイドロボット「GR-1」の予約販売が始まります! Sep 27, 2023 pm 08:41 PM

この人型ロボットは身長 1.65 メートル、体重 55 キログラム、体に 44 の自由度があり、素早く歩き、障害物を素早く回避し、斜面を着実に上り下りし、衝撃干渉に耐えることができます。フーリエインテリジェンスの汎用人型ロボット GR-1 の予約販売が開始されました ロボット講堂 フーリエインテリジェンスの汎用人型ロボット フーリエ GR-1 の予約販売が開始されました。 GR-1 は、高度にバイオニックな体幹構成と擬人化された動作制御を備えており、全身 44 度の自由度を持ち、歩行、障害物を回避、障害物を横切り、坂道を上り下りし、干渉に耐え、さまざまな道路に適応する能力を備えています。一般的な人工知能システムであり、理想的なキャリアです。公式ウェブサイトの先行販売ページ: www.fftai.cn/order#FourierGR-1# フーリエ知能を書き直す必要があります。

スマート カー スケートボード シャーシを 1 つの記事で読む スマート カー スケートボード シャーシを 1 つの記事で読む May 24, 2023 pm 12:01 PM

01 スケートボードシャーシとは いわゆるスケートボードシャーシは、バッテリー、電装系、サスペンション、ブレーキ等をシャーシ上に予め一体化し、ボディとシャーシの分離・デカップリング設計を実現したものです。このタイプのプラットフォームに基づいて、自動車会社は初期の研究開発とテストのコストを大幅に削減しながら、さまざまなモデルを作成する市場の需要に迅速に対応できます。特に無人運転時代においては、クルマのレイアウトは走行中心ではなく空間性を重視したものとなり、スケートボード型シャシーはアッパーキャビンの開発可能性をさらに広げることができる。もちろん、上の写真のように、スケートボードのシャーシを見たときに、「ああ、耐荷重のないボディだ」という第一印象に囚われてはいけません。当時は電気自動車がなかったため、数百キログラムのバッテリーパックも、ステアリングコラムを不要にするステアリングバイワイヤーシステムも、ブレーキバイワイヤーシステムもありませんでした。

インテリジェントコネクテッドカー向けのワイヤー制御シャーシテクノロジーの詳細な分析 インテリジェントコネクテッドカー向けのワイヤー制御シャーシテクノロジーの詳細な分析 May 02, 2023 am 11:28 AM

01 コントロール・バイ・ワイヤー技術 コグニティブ・コントロール・バイ・ワイヤー技術(XbyWire)は、センサーを介したドライバーの操作動作を電気信号に変換してトランスミッション制御を実現し、従来の機械システムや油圧システムに代わって、電気信号がアクチュエーターを直接制御して実現します。制御の目的と基本原理を図1に示します。この技術は、1972 年にアメリカ航空宇宙局 (NASA) が打ち上げた FlybyWire 航空機に由来します。その中で、「X」は数式における未知数のようなもので、従来は機械的または油圧的に制御されていた自動車内のさまざまなコンポーネントと関連する動作を表します。図1 ライン制御技術の基本原理

See all articles