當前位置:網站首頁>【白話科普】瀏覽器如何識別打開文件

【白話科普】瀏覽器如何識別打開文件

2022-01-27 21:55:54 程序員社區

在網絡上進行分享的時候有一個操作肯定是無法避免的,那就是“文件上傳”。我們經常發微博、發微信朋友圈等等,發送過程就用到了文件上傳中的圖片上傳功能。將本地圖片、視頻、音頻等文件上傳到程序服務器上,再供其他用戶瀏覽或下載。這就造成網站每天都會有大量數據的流入,海量數據帶來用戶的同時,也帶來了一些安全問題。

而網站的開發者在網站存儲空間中,經常會發現各類 xml、html、apk 等垃圾文件,這些文件或是注入廣告,或者散播涉黃視頻等資源,嚴重影響網站業務的運營。這些垃圾文件都是通過文件上傳功能上傳到網站存儲空間的。如果網站上傳程序沒有對用戶提交的數據進行檢驗或嚴格過濾,服務器就很容易被上傳修改過的數據。

文件上傳是數據安全中最容易被利用的一個環節,要减少惡意文件上傳打擾,我們首先需要弄清楚它的原理。

文件類型和文件擴展名的作用

計算機的數據內容一般存放在例如硬盤等等這類存儲硬件上。由於硬盤本身空間巨大,就像一個大倉庫,為了方便數據存儲以及管理,我們創造了文件的概念,也就是操作系統用文件的格式來封裝存儲於空間中的一段數據。

然而隨著互聯網的發展,從最開始的純文本文件,發展到今天各個類型的多媒體文件,如圖像、音頻、視頻等等,我們存儲的文件越來越多,種類也越來越豐富,文件體積也越來越大,如果不對這些文件進行區分,查找起來極為麻煩。所以文件格式(或文件類型)也就應運而生。每一類文件,都能以一種或多種文件格式保存在電腦存儲中。每一種文件格式通常會有一種或多種擴展名可以用來識別,擴展名可以幫助用戶和應用程序識別的文件格式。

例如,有一個文件被命名為 README.txt ,.txt 就是這個文件的擴展名,而 txt 適用於純文本文件。這類文件可能是一份文件內容為純文本的說明文檔。

Windows 下默認使用記事本打開 txt 文件

除此之外,擴展名還可以幫助操作系統判斷以何種方式讀取文件。例如 score.doc 這個文件,doc 文件可以用 Word 打開,那麼 Windows 用戶在雙擊一個 .doc 文件後, Windows 系統會根據文件擴展名“doc”,在自維護數據庫錶中查找“可以打開這個擴展名文件的程序”,如 Word 程序,之後系統會自動啟動 Word 程序,並通知 Word 去加載這個文件。

從這裏可以看出,Windows 系統在打開一個文件的時候,只需要文件名中的擴展名就可以找到對應的程序。所以,改變一個文件的擴展名,也會更改這個文件在系統中的默認打開方式。而且如果文件本身內容不符合程序對文件內容格式的預期,則打開會出錯,或者出現意料之外的結果。

瀏覽器如何識別打開文件

因為互聯網工具功能的逐漸完善,相比在本地打開文件,使用瀏覽器打開文件的幾率也逐漸增多了。那麼,瀏覽器是如何確認訪問的資源是什麼文件類型的呢?其實是通過響應頭來判斷的。

當用戶輸入 URL 後,資源所在服務器會進行響應,並給出 Content-Type 響應頭,其值就是文件對應的類型(MIME 類型)。如果瀏覽器支持該格式,則瀏覽器會嘗試渲染顯示對應文件。

與 Windows 系統中相比,瀏覽器通常使用 MIME 類型,而不是文件擴展名來處理 URL。因此在響應頭中添加正確的 MIME 類型就顯得非常重要,如果配置不正確,瀏覽器可能會曲解文件內容,下載的文件也會被錯誤處理,進而影響網站的正常運作。

惡意文件是如何上傳的

最開始我們提到一些惡意資源會通過上傳文件的方式上傳,這些惡意資源的文件格式明明是正常格式,但是打開後卻會出現跳轉網頁等特殊訪問效果。這是怎麼做到的呢?

【白話科普】瀏覽器如何識別打開文件插圖1

其實原理很簡單,就是通過修改 MIME 類型作出的操作。比如上圖的 test.jpg 圖片。雖然 URL 鏈接的資源後綴是 jpg,但是真實的資源的文件類型是 text/html ,也就是網頁類型。

【白話科普】瀏覽器如何識別打開文件插圖2

而這種網頁類型的文件支持 JS 代碼地嵌入,並可以通過這些代碼讓打開文件的用戶跳轉到指定網站。盡管這個現象看起來和 DNS 劫持有些相似,但是其實是不同的。關於 DNS 劫持的問題,大家可以查看【白話科普】聊聊 DNS 的那些小知識》了解更多。

test.jpg 的真身

如此看來這類惡意文件是通過修改文件 MIME 來達到效果的,那麼我們是否可以通過限制 MIME 等方式來减少此類惡意文件的上傳與訪問呢?有的,方法還有很多種,我們接下來以又拍雲存儲為例一一講解。

防止惡意文件上傳手段

身份溯源 - TOKEN 上傳

使用 TOKEN 上傳時 TOKEN 鑒權會使用終端上傳文件的標識信息來計算 TOKEN,控制上傳有效期,固定上傳目錄或者上傳後綴。與一般的所有用戶使用服務器上一個操作員信息進行鑒權上傳的方式不同,雲存儲提供的 TOKEN 鑒權可以實現更加細粒度的權限控制。

【白話科普】瀏覽器如何識別打開文件插圖4

開啟 TOKEN 功能後我們可以為每個用戶分配一個獨立標識,這樣用戶上傳的文件會按照標識單獨建立目錄進行存儲。

X-Upyun-Uri-Prefix = /服務名/client_37ascii     // 用戶標識前綴,對應存儲上的一個目錄,如 /client_37ascii/ X-Upyun-Uri-Postfix = .jpg  // 限定上傳文件後綴 

通過這種方式上傳的文件,可以通過標識來快速進行身份回溯,找到是誰上傳了大量惡意文件,並進行處理。

文件證明 - Content-Type

第二種方式是從文件保存名方面進行限制。我們可以對上傳文件的 MIME 類型進行限制,例如限制上傳的圖片類為型 Content-Type 類型,這樣即便上傳了惡意文件,當瀏覽器訪問的時候,瀏覽器會强制按照圖片格式進行解析,非圖片資源則會解析失敗,從而限制惡意文件的訪問。

雲存儲的 REST API 與 FORM API 都支持强制設置 Content-Type 類型。其中 FORM API 更是支持多種限制方法:

【白話科普】瀏覽器如何識別打開文件插圖5

具體的使用方法我們以 Java SDK Form API 上傳為示例:

//初始化uploaderFormUploader uploader = new FormUploader(BUCKET_NAME, OPERATOR_NAME, OPERATOR_PWD);//初始化 policy 參數組 Map final Map<String, Object> paramsMap = new HashMap<String, Object>();//添加 SAVE_KEY 參數 paramsMap.put(Params.SAVE_KEY, savePath); //添加文件上傳限制paramsMap.put(Params.CONTENT_TYPE, "image/jpg"); //强制文件MIME類型paramsMap.put(Params.ALLOW_FILE_TYPE, "jpg,jpeg,png"); //强制文件擴展名paramsMap.put(Params.CONTENT_LENGTH_RANGE, "102400,1024000"); //强制文件大小,單比特字節//執行上傳uploader.upload(paramsMap, file);

只要在上傳設置中設置了以上的任意參數,如果有上傳請求,雲存儲就會偵測上傳文件內容,再用判斷值跟上傳指定值進行匹配,匹配成功則允許上傳,匹配失敗則返回 403 狀態碼。

設置了 Content-Type 上傳的偽裝圖片再也打不開了

拒絕訪問 - 邊緣規則

上面說到的兩個方法都是在上傳的時候排除惡意文件,那已經上傳了的文件要怎麼辦呢?

針對已經上傳的偽裝成圖片的惡意資源,我們可以邊緣規則來識別。通過為每一條圖片鏈接增加一個隱式的雲處理圖片參數讓惡意文件無法正常顯示,出現 405 錯誤反饋。

邊緣規則

訪問效果

除去圖片限制外,如果在圖片空間內發現了大量惡意 APK,我們也可以通過邊緣規則來快速禁止對它們的訪問。

控制臺邊緣規則配置

訪問效果

熱門鏈接 - 統計分析

如果有很多文件,而且文件類型本身很多,排查的時間很長,需要馬上檢查出問題。也可以看一下又拍雲的日志分析功能。這個功能每天都會統計每個服務下的訪問域名訪問情况,可以根據熱門文件、熱門客戶端、熱門引用文件、資源狀態碼、文件大小、熱門 IP 等維度來統計 TOP 1000 的分析數據。

【白話科普】瀏覽器如何識別打開文件插圖11

統計分析可以幫助您綜合盤點服務情况。如果發現某一條資源、某一個 IP 有异常高頻率的訪問,可以及時定比特進行排查。

信息安全 - 內容識別

如果您的網站流量很大,而通過上面的方式進行限制不太合適的話。您還可以看一下又拍雲聯合梵為公司的天清和天測兩款內容識別工具。

這兩款工具以 AI 智能安全檢測為核心,通過機器學習的分類器算法,“智能”地對圖片、視頻等信息做審核,逐漸將“鑒黃師”從職業變成一種“算法”和“模型”。解放人力,並且大大提昇處理效率,幫助企業减少投入成本。為客戶提供內容安全預警、 內容安全數據以及內容安全⻛評等服務,提供完善的網絡信息內容安全解决方案,

目前已經為數家互聯網企業以及政府部門提供了低延遲、高精度、可視化的整套從引擎識別到人工審核一站式內容安全服務。

版權聲明
本文為[程序員社區]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201272155543350.html

隨機推薦