前端防病毒扫描文件上传
Posted
技术标签:
【中文标题】前端防病毒扫描文件上传【英文标题】:Front-End Antivirus Scan File Uploads 【发布时间】:2019-04-09 11:05:57 【问题描述】:我想在文件上传到服务器之前对其进行病毒和恶意软件扫描。例如,一旦用户上传文件,应该有一个扫描程序来检测是否存在病毒或恶意软件并立即拒绝它。无论如何要在文件上传到服务器之前对其进行扫描?喜欢使用 javascript 或任何软件开发工具。
谢谢
【问题讨论】:
一旦用户上传文件检查文件灭绝并使其生效。 (png, jpg, docx, xlx ...) 【参考方案1】:嗯,这是可以做到的。例如,您可以在浏览器中使用 javascript 对内容进行仲裁,然后选择仅在内容安全的情况下将表单提交到您的服务器。
下面是示例代码的演练以及执行此操作的所有内容:https://docs.scanii.com/articles/client-side-content-arbitration.html
这使用 scanii.com 进行内容分析,但您可以遵循完全相同的流程,只需将 scanii.com 替换为代理您已经使用的任何防病毒软件的 EC2 实例。
这个三足仲裁系统的一个非常重要的部分是,您必须在服务器上验证仲裁的真实性,以防止有人只是在客户端弄乱 javascript 并绕过整个事情。您可以在此处的示例代码中看到该逻辑:https://github.com/uvasoftware/scanii-token-sample/blob/master/app.js#L56
本质上,当最终发布表单/文件时,您需要调用已处理的服务(在上面的示例中是 scanii.com),以确保文件确实被分析并被认为是安全的。
这听起来比实际情况要复杂,我们已经有很多客户这样做了,而且一旦设置好,因为您将大部分工作卸载到浏览器上,而您的服务器仍然没有不良内容。
【讨论】:
这是一个有趣的选项,但文件上是否还有一些可信签名,因此服务器不仅可以确保该文件已被扫描,还可以确保它在此之后没有被回火?正如麻所提到的,这样做很容易,但在你的代码中没有看到它简单.. 是的,有效负载响应中提供了一个 sha1 校验和,因此您可以确保在服务上处理的位与原始位匹配。很好的问题和人们通常忽略的东西 - 在运输中回火。【参考方案2】:是否有在文件上传到服务器之前对其进行扫描? - 答案是否定的,您无法控制最终用户的操作系统
添加到@Mjh,上传后可以在服务器端扫描文件
在上传之前,您可以运行一些验证,
-
只允许您的应用程序需要的文件扩展名
如果文件扩展名有效,则检查文件的类型,例如应用程序/文本、应用程序/csv 等。
应通过安全通道上传
您可以在托管服务中安装防病毒/恶意软件检测器
对移动新文件的文件夹的适当权限
【讨论】:
【参考方案3】:JavaScript 在某人的浏览器中运行。这是什么意思?
意思是:
此人可以完全控制其浏览器正在执行的内容 此人可以阅读文本并更改 JS 病毒扫描程序证明它可以被篡改,不能被信任。
当您上传文件时,您是通过 HTTP 协议进行的。这意味着 JavaScript 在此之前完成,并且它发送到服务器的所有数据对用户都是可见的,并且用户可以更改它。
因此,如果存在 JS 上传过滤器,它本质上是不安全的,这就是没有 JS“防病毒扫描程序”的原因。
上传后,您可以将文件放在服务器上。
【讨论】:
有很多方法可以确保某些东西没有被篡改。关键是实际的病毒扫描必须由受信任的一方完成。一个简单的选择是托管与您的应用程序分开的病毒扫描服务。 @Rafael Ferreira 的回答列举了一些例子。另一种选择是要求客户端的机器安装一个特定的病毒扫描程序,它以某种方式与您的应用程序集成。这仅在受控的企业/Intranet 类型的环境中才是现实的。 @hemp 以及是什么让您写出如此详尽的答案,在其中“解释”如何实现目标?是什么让我不知道它让你写评论?我真的很感兴趣。你读了答案,你想“嘿,这个泄露与 HTTP 和 JavaScript 相关的见解的人显然不知道有他可以使用的服务,我会去帮助他,因为我觉得他太绿了” ?如果您仔细阅读问题并将您的努力指向 OP,那么我相信他/她会欣赏您的洞察力和方法。或者你可以写一个答案 OP 问道,“在文件上传到服务器之前,有没有办法扫描文件?”你的回答基本上说“不”。我只是在澄清这是可能的,即使你所说的关于浏览器中的 JS 不是防篡改的说法是正确的。我没有添加自己的答案,因为它基本上反映了拉斐尔的答案。以上是关于前端防病毒扫描文件上传的主要内容,如果未能解决你的问题,请参考以下文章