首頁 後端開發 php教程 利用PHP实现智能文件类型检测的实现代码_PHP

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

Jun 01, 2016 pm 12:15 PM
智慧

使用文件后缀和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 Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Windows 11 上的智慧型應用程式控制:如何開啟或關閉它 Windows 11 上的智慧型應用程式控制:如何開啟或關閉它 Jun 06, 2023 pm 11:10 PM

智慧型應用程式控制是Windows11中非常有用的工具,可幫助保護你的電腦免受可能損害資料的未經授權的應用程式(如勒索軟體或間諜軟體)的侵害。本文將解釋什麼是智慧型應用程式控制、它是如何運作的,以及如何在Windows11中開啟或關閉它。什麼是Windows11中的智慧型應用控制?智慧型應用程式控制(SAC)是Windows1122H2更新中引入的新安全功能。它與MicrosoftDefender或第三方防毒軟體一起運行,以阻止可能不必要的應用,這些應用程式可能會減慢設備速度、顯示意外廣告或執行其他意外操作。智慧應用

五官亂飛,張嘴、瞪眼、挑眉,AI都能模仿到位,影片詐騙要防不住了 五官亂飛,張嘴、瞪眼、挑眉,AI都能模仿到位,影片詐騙要防不住了 Dec 14, 2023 pm 11:30 PM

好強大的AI模仿能力,真的防不住,完全防不住。現在AI的發展已經達到這種程度了嗎?你前腳讓自己的五官亂飛,後腳,一模一樣的表情就被復現出來,瞪眼、挑眉、噘嘴,不管多麼誇張的表情,都模仿的非常到位。加大難度,讓眉毛挑的再高些,眼睛睜的再大些,甚至連嘴型都是歪的,虛擬人物頭像也能完美復現表情。當你在左邊調整參數時,右邊的虛擬頭像也會相應地改變動作給嘴巴、眼睛一個特寫,模仿的不能說完全相同,只能說表情一模一樣(最右邊)。這項研究來自慕尼黑工業大學等機構,他們提出了GaussianAvatars,這種

MotionLM:多智能體運動預測的語言建模技術 MotionLM:多智能體運動預測的語言建模技術 Oct 13, 2023 pm 12:09 PM

本文經自動駕駛之心公眾號授權轉載,轉載請洽出處。原標題:MotionLM:Multi-AgentMotionForecastingasLanguageModeling論文連結:https://arxiv.org/pdf/2309.16534.pdf作者單位:Waymo會議:ICCV2023論文想法:對於自動駕駛車輛安全規劃來說,可靠地預測道路代理未來行為是至關重要的。本研究將連續軌跡表示為離散運動令牌序列,並將多智能體運動預測視為語言建模任務。我們提出的模型MotionLM有以下幾個優點:首

你知道程式設計師再過幾年會沒落? 你知道程式設計師再過幾年會沒落? Nov 08, 2023 am 11:17 AM

《ComputerWorld》雜誌曾經寫過一篇文章,說“編程到1960年就會消失”,因為IBM開發了一種新語言FORTRAN,這種新語言可以讓工程師寫出他們所需的數學公式,然後提交給電腦運行,所以程式設計就會終結。圖片又過了幾年,我們聽到了一種新說法:任何業務人員都可以使用業務術語來描述自己的問題,告訴電腦要做什麼,使用這種叫做COBOL的程式語言,公司不再需要程式設計師了。後來,據說IBM開發了一門名為RPG的新程式語言,可以讓員工填寫表格並產生報告,因此大部分企業的程式設計需求都可以透過它來完成圖

一文聊聊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已開啟預售機器人大講堂傅利葉智慧FourierGR-1通用人形機器人現已開放預售。 GR-1擁有高度仿生的軀幹構型和擬人化的運動控制,全身44個自由度,具備行走、避障、越障、上下坡、抗干擾、適應不同路面等運動能力,是通用人工智慧的理想載體。官網預售頁:www.fftai.cn/order#FourierGR-1#傅利葉智能需要改寫的內

華為將在智慧穿戴領域推出玄璣感知系統 可根據心率評估用戶情緒狀態 華為將在智慧穿戴領域推出玄璣感知系統 可根據心率評估用戶情緒狀態 Aug 29, 2024 pm 03:30 PM

近日,華為宣布將於9月推出搭載玄璣感知系統的全新智慧穿戴新品,預計為華為的最新智慧手錶。該新品將整合先進的情緒健康監測功能,玄璣感知系統以其六大特性——準確性、全面性、快速性、靈活性、開放性和延展性——為用戶提供全方位的健康評估。系統採用超感知模組,優化了多通道光路架構技術,大幅提升了心率、血氧和呼吸速率等基礎指標的監測精度。此外,玄璣感知系統也拓展了以心率資料為基礎的情緒狀態研究,不僅限於生理指標,還能評估使用者的情緒狀態和壓力水平,並支持超過60項運動健康指標監測,涵蓋心血管、呼吸、神經、內分泌、

行人軌跡預測有哪些有效的方法和普遍的Base方法?頂會論文分享! 行人軌跡預測有哪些有效的方法和普遍的Base方法?頂會論文分享! Oct 17, 2023 am 11:13 AM

軌跡預測近兩年風頭正猛,但大都聚焦於車輛軌跡預測方向,自動駕駛之心今天就為大家分享頂會NeurIPS上關於行人軌跡預測的演算法—SHENet,在受限場景中人類的移動模式通常在一定程度上符合有限的規律。基於這個假設,SHENet透過學習隱含的場景規律來預測一個人的未來軌跡。文章已經授權自動駕駛之心原創!作者的個人理解由於人類運動的隨機性和主觀性,目前預測一個人的未來軌跡仍然是一個具有挑戰性的問題。然而,由於場景限制(例如平面圖、道路和障礙物)以及人與人或人與物體的互動性,在受限場景中人類的移動模式通

See all articles