【问题标题】:how to secure zip file upload?如何保护 zip 文件上传?
【发布时间】:2017-11-11 02:26:10
【问题描述】:

我在 netbeans 中有一个项目,我的雇主希望我添加批量文件上传。 要求是,用户将 csv 文件和一些图像放在客户端的文件夹中。在文件上传页面上,他将选择 csv 文件,我必须将文件夹中的图像与 csv 一起上传。 经过短暂的研究后,我发现无法从服务器端访问客户端文件位置和详细信息,因此用户不会上传单个文件及其所属文件夹中的内容,而是压缩所有文件并上传压缩文件。 现在我担心上传 zip 文件的安全风险。

  1. 我应该采取哪些措施来防止恶意脚本和文件与 zip 一起上传?
  2. 是否可以在文件内容到达服务器之前对其进行验证?
  3. 是否可以在它到达服务器端后安全地验证它?

【问题讨论】:

  • 如果您特别担心 zip 文件(尽管原因尚不完全清楚),请不要让用户上传 zip 文件。上传表单可以包含多个文件。
  • 您在担心什么? zip 文件只是一个文件,就像任何其他文件一样。一个字节序列。上传 zip 文件并没有什么危险。如果您打开 zip 文件并执行存储在 zip 文件中的可执行文件,则可能会出现问题。但是你为什么要这样做呢?
  • 我很担心 zip 文件,因为上传后我必须将其解压缩到服务器中的一个文件夹中,并且必须进行一些操作。如果 zip 包含可执行文件,这些文件可以在到达后执行怎么办服务器。关于上传表单,我以前从未使用过。我在这里尝试上传的内容将包含大约 3000 个 jpg 文件和一个 csv 文件,其中包含一些详细信息和特定图像的名称。
  • 可执行文件不只是自己执行。如果你不执行它们,它们将不会被执行。但是您可以删除所有非 .jpg 文件,并删除所有具有可执行标志的文件(如果有的话,我什至不确定 zip 文件是否可行)。

标签: java security zipfile uploading


【解决方案1】:

1.- 压缩文件到达服务器后对其进行扫描。

2.- 不太可能。即使您使用 Javascript 作为前端,它也无权访问用户文件系统。

3.- 是的,例如使用“clamav”,但请注意没有防病毒软件是 100% 有效的。

步骤如下:

  • 安装clamav

  • 配置 clamav 定期更新其病毒库

  • 安排一个 cron 作业,持续扫描特定目录(上传用户文件的目录)中的所有文件

  • 删除包含病毒的文件

例如:

# dnf install -y clamav

# dnf install -y clamav-update

$ clamscan java_error_in_IDEA_6451.log.zip

LibClamAV 警告:******************************************** ******

LibClamAV 警告:* 病毒库已超过 7 天!

LibClamAV 警告:请尽快更新。 *

LibClamAV 警告:**************************************************** ***

java_error_in_IDEA_6451.log.zip:好的

----------- 扫描摘要 -----------

已知病毒:4490129

引擎版本:0.99.2

扫描目录:0

扫描文件:1

受感染文件:0

扫描数据:0.37 MB

数据读取:0.03 MB(比率 13.43:1)

时间:6.239 秒(0 米 6 秒)

【讨论】:

    【解决方案2】:

    防病毒是可选的。您在这里需要做的就是验证文件并将其安全地从存档中提取到您的服务器存储中。我不建议为此使用系统实用程序(zip 等)。最好使用一些库来处理 zip 档案并为其处理编写代码。

    这里是验证存档文件的可能算法。您应该遍历每个文件并检查是否:

    1. 文件太大。
    2. 文件名太长。
    3. 目录结构太大。
    4. 文件名包括../
    5. 文件扩展名不在白名单中。
    6. 文件的属性为symlink
    7. 其他规则。

    如果您当前的文件有问题,那么最好停止处理此类存档并向客户端显示错误。

    检查完所有内容后,您就可以开始提取文件了。从此时起,您可以尝试使用fileexif 工具验证文件内容。

    此外,您可以要求具有某些特殊结构的档案。例如,所有图片必须在images文件夹中,存档必须只有1级文件夹等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      相关资源
      最近更新 更多