Comment puis-je voir si un tableau d'octets contient un flux zip? Mon application obtient des fichiers d'autres applications via http post avec l'encodage Base64. En fonction de l'implémentation de l'application qui fournit les fichiers, le tableau d'octets issu de la chaîne Base64 peut être gzippé. Comment puis-je reconnaître les tableaux gzippés? J'ai trouvé une méthode, mais je pense que ça va mal tourner quand quelqu'un télécharge un fichier zip ou prepared "bad" zip fileComment savoir si un tableau d'octets est gzippé
C'est ce que j'ai trouvé et qui fonctionne, mais peut-il être exploité d'une certaine façon?
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
Si le IsGzip renvoie true mon application décompresse le tableau d'octets.
Il s'agit d'une approche discutable: spécifier explicitement le format est beaucoup plus sûr - envisager une nouvelle conception. C'est à dire. est-ce que 'docx' (ou tout autre format de fichier de document zippé) est considéré comme" Zip "ou" document unique "? –
Selon le [RFC for Gzip] (http://www.gzip.org/zlib/rfc-gzip.html), l'en-tête d'un flux Gzip commence toujours par 0x1F8B, ce que l'extrait de code teste. Cela peut donner un "faux positif" si je télécharge simplement un fichier aléatoire qui commence par l'en-tête mais qui n'est pas réellement du contenu Gzip. Vous obtiendrez également un résultat beaucoup plus "positif" si vous avez également vérifié le CRC du flux. Le seul moyen infaillible de dire est d'essayer de le décompresser. – vcsjones
Les applications qui fournissent les fichiers sont des applications externes qui fournissent un indicateur via les données POST que les fichiers sont zippés, mais nous ne pouvons pas compter entièrement sur le fait qu'ils déclarent qu'il s'agit d'un type de fichier. Nous devons découvrir par nous-mêmes pour assurer la sécurité. –