我怎样才能保护自己免受拉链炸弹的袭击?
我刚刚读到zip炸弹,即包含大量高度可压缩数据的zip文件(00000000000000000 ...)。
打开后它们会填满服务器的磁盘。
如何在解压缩 zip 文件之前检测它是否为 zip 炸弹?
更新你能告诉我这是如何在Python或Java中完成的吗?
I just read about zip bombs, i.e. zip files that contain very large amount of highly compressible data (00000000000000000...).
When opened they fill the server's disk.
How can I detect a zip file is a zip bomb before unzipping it?
UPDATE Can you tell me how is this done in Python or Java?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
在 Python 中试试这个:
Try this in Python:
嗯,Zip 是一种“有趣”的格式。一个强大的解决方案是将数据流式传输出去,并在数据足够时停止。在 Java 中,使用
ZipInputStream
而不是ZipFile
。后者还要求您将数据存储在临时文件中,这也不是最好的想法。Zip is, erm, an "interesting" format. A robust solution is to stream the data out, and stop when you have had enough. In Java, use
ZipInputStream
rather thanZipFile
. The latter also requires you to store the data in a temporary file, which is also not the greatest of ideas.阅读维基百科上的描述 -
拒绝任何包含压缩文件的压缩文件。
使用 ZipFile.entries()< /a> 检索文件列表,然后 ZipEntry.getName() 查找文件扩展名。
拒绝任何包含超过设定大小的文件的压缩文件,或者启动时无法确定大小。
迭代文件时使用 ZipEntry .getSize() 检索文件大小。
Reading over the description on Wikipedia -
Deny any compressed files that contain compressed files.
Use ZipFile.entries() to retrieve a list of files, then ZipEntry.getName() to find the file extension.
Deny any compressed files that contain files over a set size, or the size can not be determined at startup.
While iterating over the files use ZipEntry.getSize() to retrieve the file size.
不要让上传过程写入足够的数据来填满磁盘,即解决问题,而不仅仅是问题的可能原因之一。
Don't allow the upload process to write enough data to fill up the disk, ie solve the problem, not just one possible cause of the problem.
如果您使用的 ZIP 解压缩器可以提供有关原始大小和压缩大小的数据,您就可以使用该数据。否则,开始解压缩并监视输出大小 - 如果它增长太多,请将其松开。
If the ZIP decompressor you use can provide the data on original and compressed size you can use that data. Otherwise start unzipping and monitor the output size - if it grows too much cut it loose.
首先检查 zip 标头:)
Check a zip header first :)
确保您没有使用系统驱动器进行临时存储。我不确定病毒扫描程序是否会检查它是否遇到它。
您还可以查看 zip 文件内的信息并检索内容列表。如何执行此操作取决于用于提取文件的实用程序,因此您需要在此处提供更多信息
Make sure you are not using your system drive for temp storage. I am not sure if a virusscanner will check it if it encounters it.
Also you can look at the information inside the zip file and retrieve a list of the content. How to do this depends on the utility used to extract the file, so you need to provide more information here