2016-11-29 83 views
-1

如何從c#中的byte []或Base64String獲取內容類型(MIME類型)? (Asp.Net Core)從C#中的字節[]獲取內容類型

我的web api正在接收在JSON對象內發送的文件。該文件在Base64String中編碼。我的第一步是將這個base64string轉換爲一個字節數組,然後執行驗證。其中一個驗證是檢查它是否是有效的文件。爲此,我需要檢查其內容類型。

private bool validateContent (byte[] content) { 
    //Get mime content type from content 
} 
+6

很容易被欺騙'內容Type'應作爲發送一個頭。它不會在數據本身。你的JSON對象是什麼樣的? –

+1

@DanWilson:我認爲他希望從任何以字節形式發送的數據(即,像excel xlsx,xls,圖像這樣的二進制文件並且不信任客戶端發送什麼等)獲得mimetype,即客戶端通常發送壓縮文件作爲'application/octet-stream',就像一些郵件客戶端,它什麼都不知道它真的是什麼類型) – Tseng

+0

我知道,我說這是不可能從字節流單獨的,除非你想掃描文件類型標記在數據,這是不可靠的和容易出錯的。 http://stackoverflow.com/questions/1654846/in-c-how-can-i-know-the-file-type-from-a-byte –

回答

1

只需檢查文件簽名(幻數),例如HEX或ASCII就可以了。簽名的列表,你可以在https://en.wikipedia.org/wiki/List_of_file_signatureshttp://www.garykessler.net/library/file_sigs.html

發現不信任請求頭Content-Type,因爲它可以通過用戶

+1

文件簽名也可能被欺騙。當然,文件擴展名也是如此。沒有安全的方法。 – poke

+0

當然,但如果你欺騙文件簽名/擴展名文件可能會被解釋器誤讀,並且finnaly沒有執行。欺騙請求頭Content-Type要危險得多。半安全將是chceck文件簽名和擴展 –