上传&自动提取存档(zip,rar,targz,tarbz) - 安全问题?

时间:2009-12-14 21:26:04

标签: security upload archive

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

  1. 用户上传档案文件(zip / rar / tar.gz / tar.bz等)(内容 - 多个图片文件)
  2. 归档在上传后自动解压缩
  3. 图像显示在HTML列表中(无论如何)
  4. 提取过程是否涉及任何安全问题?例如。上传文件(或准备好的档案文件)中包含恶意代码执行的可能性,还是?

2 个答案:

答案 0 :(得分:7)

除了没有仔细实现缓冲区溢出之类的系统利用系统的可能性之外,如果你盲目地提取一个带有冗余模式的大文件(拉链炸弹)的精心设计的压缩文件,可能会出现问题。压缩版本非常小,但是当你提取时,它会占用整个磁盘,导致拒绝服务并可能导致系统崩溃。

此外,如果您不够谨慎,客户端可能会将带有服务器端可执行内容(.php.asp.aspx,...)的zip文件放在内部,通过HTTP请求文件,如果配置不当,可能导致服务器上的任意代码执行。

答案 1 :(得分:3)

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

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

  • 在完全不同的域上托管用户提供的文件。
  • 包含用户文件的域应使用不同的IP地址。
  • 如果可能,请对数据进行解码和重新编码。
  • 还有另一个关于zip炸弹的stackoverflow问题 - 我建议使用ZipInputStream进行解压缩,如果太大则停止。
  • 如果本机代码触及用户数据,请在chroot监狱中执行。
  • 白名单字符或完全替换文件名。
  • 您可以使用某些描述的IDS来扫描可疑数据(我真的不知道这样做多少 - 确保您的IDS不是用C语言写的!)。