5

我想为我的基于 Web 的应用程序创建以下功能:

  1. 用户上传存档文件(zip/rar/tar.gz/tar.bz 等)(内容 - 几个图像文件)
  2. 上传后自动提取存档
  3. 图像显示在 HTML 列表中(无论如何)

提取过程是否涉及任何安全问题?例如,上传文件(或精心准备的存档文件)中包含恶意代码执行的可能性,还是其他?

4

2 回答 2

7

除了如果没有仔细实施可能会利用缓冲区溢出之类的系统来利用系统,如果您盲目地提取一个精心制作的压缩文件,其中包含一个内部带有冗余模式的大文件(一个 zip 炸弹),则可能会出现问题。压缩后的版本非常小,但解压后会占用整个磁盘,导致拒绝服务并可能导致系统崩溃。

此外,如果您不够小心,客户端可能会传递一个包含服务器端可执行内容(、、、...)的 zip 文件,.php.asp通过.aspxHTTP 请求该文件,如果配置不正确,可能会导致任意代码执行在服务器上。

于 2009-12-14T21:27:55.197 回答
3

除了 Medrdad 的回答:托管用户提供的内容有点棘手。如果您正在托管一个 zip 文件,那么它可以用于存储 Java 类文件(也用于其他格式),因此可以破坏“同源策略”。(存在 GIFAR 攻击,其中一个 zip 附加到另一个文件的末尾,但它不再适用于 Java PlugIn/WebStart。)至少应检查图像文件是否真的是图像文件。显然,Web 浏览器存在缓冲区溢出漏洞,现在您的网站可能被用来攻击您的访问者(这可能会让您不受欢迎)。您可能会发现一些客户端软件使用正则表达式来传递数据,因此可以执行图像文件中间的数据。Zip 文件的文件名可能不恰当(例如,../和奇怪的字符)。

做什么(不一定是详尽的清单):

  • 主机用户在完全不同的域上提供文件。
  • 包含用户文件的域应使用不同的 IP 地址。
  • 如果可能,对数据进行解码和重新编码。
  • 还有一个关于 zip 炸弹的 stackoverflow 问题——ZipInputStream如果它变得太大,我建议使用解压缩并停止。
  • 在本机代码接触用户数据的地方,在 chroot 监狱中进行。
  • 白名单字符或完全替换文件名。
  • 潜在地,您可以使用某种描述的 IDS 来扫描可疑数据(我真的不知道这做了多少 - 确保您的 IDS 不是用 C 编写的!)。
于 2009-12-14T22:22:42.650 回答