如何安全上传 zip 文件?
how to secure zip file upload?
我在 netbeans 中有一个项目,我的雇主希望我添加批量文件上传。
要求是,用户将把一个 csv 文件和一些图像放在客户端的一个文件夹中。在文件上传页面上,他将选择 csv 文件,我必须将文件夹中的图像与 csv 一起上传。
经过短暂的研究,我发现无法从服务器端访问客户端文件位置和详细信息,因此用户不会上传单个文件及其所属文件夹中的内容,而是压缩所有文件并上传压缩文件。
现在我担心上传 zip 文件的安全风险。
- 我应该采取哪些措施来防止恶意脚本和文件随 zip 一起上传?
- 是否可以在文件内容到达服务器之前对其进行验证?
- 是否可以在到达服务器端后安全地验证它?
1.- zip 文件到达服务器后扫描。
2.- 不太可能。即使您使用 Javascript 作为前端,它也无法访问用户文件系统。
3.- 是的,例如 "clamav",但请注意,没有防病毒软件是 100% 有效的。
步骤是:
安装clamav
配置clamav定期更新病毒库
安排一个连续扫描特定目录(上传用户文件的目录)中的所有文件的 cron 作业
删除含有病毒的文件
例如:
# dnf install -y clamav
# dnf install -y clamav-update
$clamscanjava_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 秒)
防病毒是可选的。您在这里所需的一切都是验证文件并将其安全地从存档中提取到服务器存储中。我不建议为此使用系统实用程序(zip
,等等)。最好使用一些库来处理 zip 存档并为其处理编写代码。
这是验证存档文件的可能算法。您应该遍历每个文件并检查是否:
- 文件太大。
- 文件名太长。
- 目录结构太大。
- 文件名包括
../
.
- 文件扩展名不在白名单中。
- 文件具有 symlink.
的属性
- 其他规则。
如果您当前的文件是正确的,那么最好停止处理此类存档并向客户端显示错误。
检查完所有内容后,就可以开始提取文件了。从这一刻起,您可以尝试使用 file or exif 工具验证文件内容。
此外,您可以要求具有某些特殊结构的档案。例如,所有图像必须在 images
文件夹中,存档必须只有 1 级文件夹等。
我在 netbeans 中有一个项目,我的雇主希望我添加批量文件上传。 要求是,用户将把一个 csv 文件和一些图像放在客户端的一个文件夹中。在文件上传页面上,他将选择 csv 文件,我必须将文件夹中的图像与 csv 一起上传。 经过短暂的研究,我发现无法从服务器端访问客户端文件位置和详细信息,因此用户不会上传单个文件及其所属文件夹中的内容,而是压缩所有文件并上传压缩文件。 现在我担心上传 zip 文件的安全风险。
- 我应该采取哪些措施来防止恶意脚本和文件随 zip 一起上传?
- 是否可以在文件内容到达服务器之前对其进行验证?
- 是否可以在到达服务器端后安全地验证它?
1.- zip 文件到达服务器后扫描。
2.- 不太可能。即使您使用 Javascript 作为前端,它也无法访问用户文件系统。
3.- 是的,例如 "clamav",但请注意,没有防病毒软件是 100% 有效的。
步骤是:
安装clamav
配置clamav定期更新病毒库
安排一个连续扫描特定目录(上传用户文件的目录)中的所有文件的 cron 作业
删除含有病毒的文件
例如:
# dnf install -y clamav
# dnf install -y clamav-update
$clamscanjava_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 秒)
防病毒是可选的。您在这里所需的一切都是验证文件并将其安全地从存档中提取到服务器存储中。我不建议为此使用系统实用程序(zip
,等等)。最好使用一些库来处理 zip 存档并为其处理编写代码。
这是验证存档文件的可能算法。您应该遍历每个文件并检查是否:
- 文件太大。
- 文件名太长。
- 目录结构太大。
- 文件名包括
../
. - 文件扩展名不在白名单中。
- 文件具有 symlink. 的属性
- 其他规则。
如果您当前的文件是正确的,那么最好停止处理此类存档并向客户端显示错误。
检查完所有内容后,就可以开始提取文件了。从这一刻起,您可以尝试使用 file or exif 工具验证文件内容。
此外,您可以要求具有某些特殊结构的档案。例如,所有图像必须在 images
文件夹中,存档必须只有 1 级文件夹等。