如何安全地提取上传的 zip?

信息安全 php 网络服务器
2021-08-30 19:38:20

我正在为客户开发一个项目,他们希望他们的用户上传可以提取的 ZIP 文件。提取后,我们将利用其中的某些文件,例如图像和 HTML 文件。

很明显,这是一个巨大的安全风险,因为您无法安全地检查文件的内容。该项目目前仅供内部用户使用,但他们希望稍后向外部用户开放。

该项目目前正在使用 Laravel 构建,并且没有任何库可以提供帮助。所以我认为这可能更多是关于服务器本身的问题。但是我们可以采取什么措施来防止这些拉链中的病毒和攻击呢?

4个回答

也许您可以找到有助于检测有害文件的库。但我担心您将不得不在严格和误报之间做出选择,或者在偶尔让恶意软件通过的风险之间做出选择。

我的建议是依靠可追溯性您控制(尽可能多地)上传的文件,但要为每个文件保留上传它的用户的名称或 ID。而你主要在这上面做广告。如果以后出现问题,您将能够确定谁是有罪的。当然,只有了解所有用户才有意义。但我无法想象一种方法来保护一个接受不受控制用户的动态内容的网站......

有一些“解压缩服务”,您可以在其中发送文件并取回内容。只要数据机密性不重要,这将减轻您的大部分风险。只需搜索它们。

我想缺少正确的答案。所以最好的方法,我能想到的如下:

  1. 创建用于上传文件的堡垒主机。并将其与服务器隔离。这将帮助您保护您的站点免受 DOS 攻击,即使发生 DOS,它也仅适用于特定类型的服务。
  2. 限制上传大小并创建验证,这样人们就不会在主机上上传大文件。
  3. 运行 unzip-services 并使用基于签名的检测启发式行为检测,尝试验证所有文件是否存在异常、(可能是 ADS)、木马、rootkit 等...
  4. 始终为 zip 分配一个 ID 号,以便可以追溯到上传它的用户。这将帮助您对抗上传恶意威胁的人。

在这种情况下,不可能完全缓解,但该解决方案将允许将威胁降低到相当大的水平。

Zip 档案本身并不邪恶。只有它们的内容是且仅当被执行时。

仅当您的解压缩算法的实现存在漏洞(例如, zip 炸弹时,解压缩 zip 存档的行为才是危险的。即使其中有有害的可执行文件,它们也只有在作为程序执行时才危险。

因此,解压缩 zip 档案、对文件类型进行指纹识别(不依赖于扩展名)并仅保留列入白名单的文件类型没有合理的安全问题。作为额外的安全预防措施,您还可以对文件进行病毒扫描。但是,当您不保留任何未打包的二进制文件时,这可能是不必要的。

请注意,在网站上嵌入第 3 方 HTML 是很危险的,因为它会打开网站,导致 XSS 注入。只有当用户无法查看其他用户上传的 HTML 时,它才是相当安全的。