Java使用tika工具類檢查文件真實類型,防止文件偽造后綴名進行攻擊

背景

服務(wù)器對上傳文件一般進行文件類型的嚴(yán)格限制,防止有惡意文件上傳至服務(wù)器。
一般使用“后綴名”方式去鑒別上傳文件類型卧波,但是該種方式有可能被繞過。
惡意攻擊者通過將非法文件修改為合法的后綴名方式提交文件至服務(wù)器策橘,從而調(diào)用惡意腳本窗悯。

e.g.
通過將.jsp后綴運行文件更改后綴名為.jpg方式偽裝為圖片提交至服務(wù)器,因為服務(wù)端對于圖片格式文件允許運行梦皮,
則導(dǎo)致惡意.jsp源文件得以運行造成影響

解決辦法

服務(wù)器不僅僅需要對文件后綴名進行校驗炭分,同時需要對文件內(nèi)容進行檢測,確保文件類型是該后綴名標(biāo)注的類型!

文件MimeType類型與后綴名參照表剑肯,如下:
http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types

tika中參照xml捧毛,如下:
https://github.com/apache/tika/blob/master/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml

工具使用

我們使用apache提供的tika工具進行文件內(nèi)容的檢測工作,tika不僅僅可以作為文件內(nèi)容檢測工具让网,同時其還是一款高效的內(nèi)容提取工具呀忧。

1.maven引入tika的檢測jar

<!-- tika核心包 -->
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>x.x.x</version>
</dependency>

2.示例代碼

/**
 * 通過tika工具檢測文件實際類型
 *
 * @throws IOException       IO異常
 * @throws MimeTypeException MimeType異常
 */
@Test
public void getMimeTypeTest() throws IOException, MimeTypeException {
    // 獲取文件
    File gifFile = ResourceUtils.getFile("classpath:files/test.gif");
    File jpgFile = ResourceUtils.getFile("classpath:files/test.jpg");
    File pngFile = ResourceUtils.getFile("classpath:files/test.png");
    File xlsFile = ResourceUtils.getFile("classpath:files/test.xls");
    File xlsxFile = ResourceUtils.getFile("classpath:files/test.xlsx");
    File docFile = ResourceUtils.getFile("classpath:files/test.doc");
    File docxFile = ResourceUtils.getFile("classpath:files/test.docx");
    File sqlFile = ResourceUtils.getFile("classpath:files/test.sql");

    // 使用tika提供的外觀工具,進行檢測
    Tika tika = new Tika();
    // 此處檢測文件內(nèi)容,返回文件MimeType名稱
    String detect = tika.detect(docFile);
    System.out.println("MimeType:" + detect);

    // 獲取tika提供的默認(rèn)參照表
    // 可以進行自定義,參照https://stackoverflow.com/questions/13650372/how-to-determine-appropriate-file-extension-from-mime-type-in-java
    MimeTypes allTypes = MimeTypes.getDefaultMimeTypes();
    // 根據(jù)MimeType名稱獲取MimeType類型
    MimeType mimeType = allTypes.forName(detect);
    // 根據(jù)MimeType類型獲取對應(yīng)的后綴名
    String extension = mimeType.getExtension();
    System.out.println(extension);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市溃睹,隨后出現(xiàn)的幾起案子而账,更是在濱河造成了極大的恐慌,老刑警劉巖因篇,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泞辐,死亡現(xiàn)場離奇詭異,居然都是意外死亡竞滓,警方通過查閱死者的電腦和手機咐吼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來商佑,“玉大人锯茄,你說我怎么就攤上這事±蛴” “怎么了撇吞?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵俗冻,是天一觀的道長。 經(jīng)常有香客問我牍颈,道長迄薄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任煮岁,我火速辦了婚禮讥蔽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘画机。我一直安慰自己冶伞,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布步氏。 她就那樣靜靜地躺著响禽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荚醒。 梳的紋絲不亂的頭發(fā)上芋类,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音界阁,去河邊找鬼侯繁。 笑死,一個胖子當(dāng)著我的面吹牛泡躯,可吹牛的內(nèi)容都是我干的贮竟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼较剃,長吁一口氣:“原來是場噩夢啊……” “哼咕别!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起重付,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤顷级,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后确垫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弓颈,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年删掀,在試婚紗的時候發(fā)現(xiàn)自己被綠了翔冀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡披泪,死狀恐怖纤子,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤控硼,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布泽论,位于F島的核電站,受9級特大地震影響卡乾,放射性物質(zhì)發(fā)生泄漏翼悴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一幔妨、第九天 我趴在偏房一處隱蔽的房頂上張望鹦赎。 院中可真熱鬧,春花似錦误堡、人聲如沸古话。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽陪踩。三九已至,卻和暖如春悉抵,著一層夾襖步出監(jiān)牢的瞬間膊毁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工基跑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人描焰。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓媳否,卻偏偏與公主長得像,于是被迫代替她去往敵國和親荆秦。 傳聞我的和親對象是個殘疾皇子篱竭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 文件上傳是一個在開發(fā)中很常見的需求場景,通常出于安全考慮,我們會對上傳的文件進行類型校驗,其中常見的有后綴名...
    攻城獅Jozz閱讀 1,478評論 1 0
  • 0x00 漏洞原理與危害 網(wǎng)站web應(yīng)用程序都有一些文件上傳功能,比如文檔步绸、圖片掺逼、頭像、視頻上傳瓤介,當(dāng)上傳功能的實現(xiàn)...
    Z1ng3r閱讀 1,584評論 0 1
  • 原文地址:https://xz.aliyun.com/t/6357 1. 文件上傳漏洞 1.1 漏洞簡介 ? 文件...
    這是什么娃哈哈閱讀 1,696評論 0 0
  • 真的很基礎(chǔ)! 不懂得:9吕喘、11 大體思路 抓包繞過前端檢測 修改MIME類型繞過服務(wù)器檢測 對于黑名單 遍歷后綴名...
    Arklight閱讀 227評論 0 0
  • 文件上傳漏洞是指用戶上傳了一個可執(zhí)行的腳本文件,并通過此腳本文件獲得了執(zhí)行服務(wù)器端命令的能力刑桑。這種攻擊方式是最為直...
    付出從未后悔閱讀 1,146評論 0 4