4
如何查看字節數組是否包含壓縮流?我的應用程序通過使用Base64編碼的http post來從其他應用程序獲取文件。根據提供文件的應用程序的實現,可以對Base64字符串輸出的字節數組進行gzip壓縮。我如何識別gzipped數組?我找到了一些方法,但我認爲當某人上傳一個zip文件時它會出錯或者prepared "bad" zip file如何判斷字節數組是否被壓縮
這是我找到並且工作的東西,但是它可以被某種方式利用嗎?
C#
public static bool IsGZip(byte[] arr)
{
return arr.Length >= 2 && arr[0] == 31 && arr[1] == 139;
}
VB.NET
Public Shared Function IsGZip(arr As Byte()) As Boolean
Return arr.Length >= 2 AndAlso arr(0) = 31 AndAlso arr(1) = 139
End Function
如果IsGzip返回true我的應用程序將解壓縮字節數組。
這是值得懷疑的方法:明確指定格式更安全 - 考慮重新設計。即是被認爲是「Zip」還是「單個文檔」的「docx」(或其他壓縮文檔文件格式)? –
根據[RFC for Gzip](http://www.gzip.org/zlib/rfc-gzip.html),Gzip流的標題總是以0x1F8B開始,這就是代碼片段正在測試的內容。如果我只是上傳一個以標題開始但實際上不是Gzip內容的隨機文件,它可能會產生「誤報」。如果您還檢查了流的CRC,您也會得到更積極的結果。唯一可以說是簡單的方法是實際嘗試解壓縮它。 – vcsjones
提供這些文件的應用程序是外部應用程序,它們通過POST數據提供一個標誌文件壓縮的標誌,但我們不能完全依賴於他們聲明它是某種文件類型的事實。我們必須找到自我保證安全。 –