我想为我的基于 Web 的应用程序创建以下功能:
- 用户上传存档文件(zip/rar/tar.gz/tar.bz 等)(内容 - 几个图像文件)
- 上传后自动提取存档
- 图像显示在 HTML 列表中(无论如何)
提取过程是否涉及任何安全问题?例如,上传文件(或精心准备的存档文件)中包含恶意代码执行的可能性,还是其他?
除了如果没有仔细实施可能会利用缓冲区溢出之类的系统来利用系统,如果您盲目地提取一个精心制作的压缩文件,其中包含一个内部带有冗余模式的大文件(一个 zip 炸弹),则可能会出现问题。压缩后的版本非常小,但解压后会占用整个磁盘,导致拒绝服务并可能导致系统崩溃。
此外,如果您不够小心,客户端可能会传递一个包含服务器端可执行内容(、、、...)的 zip 文件,.php
并.asp
通过.aspx
HTTP 请求该文件,如果配置不正确,可能会导致任意代码执行在服务器上。
除了 Medrdad 的回答:托管用户提供的内容有点棘手。如果您正在托管一个 zip 文件,那么它可以用于存储 Java 类文件(也用于其他格式),因此可以破坏“同源策略”。(存在 GIFAR 攻击,其中一个 zip 附加到另一个文件的末尾,但它不再适用于 Java PlugIn/WebStart。)至少应检查图像文件是否真的是图像文件。显然,Web 浏览器存在缓冲区溢出漏洞,现在您的网站可能被用来攻击您的访问者(这可能会让您不受欢迎)。您可能会发现一些客户端软件使用正则表达式来传递数据,因此可以执行图像文件中间的数据。Zip 文件的文件名可能不恰当(例如,../
和奇怪的字符)。
做什么(不一定是详尽的清单):
ZipInputStream
如果它变得太大,我建议使用解压缩并停止。