前端杀毒程序扫描文件上传

7
我想在文件上传到服务器之前对其进行病毒和恶意软件的扫描。例如,一旦用户上传文件,应该有一个扫描程序来检测是否存在病毒或恶意软件,并立即拒绝它。是否有任何方法可以在将文件上传到服务器之前对其进行扫描?比如使用JavaScript或任何软件开发工具。

谢谢


1
一旦用户上传了文件,检查文件扩展名并验证它们。(png、jpg、docx、xlx ...) - Abdulla Nilam
3个回答

4

有没有办法在文件上传到服务器之前扫描它? - 答案是NO,您无法控制最终用户的操作系统

除了 @Mjh 的回答外,您可以在上传后在服务器上扫描文件

在上传之前,您可以运行一些验证:

  1. 仅允许应用程序所需的文件扩展名
  2. 如果文件扩展名有效,则检查文件的类型,例如应用程序/文本、应用程序/CSV等
  3. 上传应通过安全通道进行
  4. 您可以在托管服务中获得杀毒软件/恶意软件检测器
  5. 将新文件移动到文件夹的权限正确设置

4
可以做到。例如,您可以在浏览器中使用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)以确保文件确实经过了分析并被认为是安全的。

这听起来比实际复杂得多,我们已经有很多客户正在使用这种方法,并且一旦设置完成,就非常好用,因为您可以将大部分工作卸载到浏览器上,从而使您的服务器保持无害内容。


这是一个有趣的选项,但是否还有一些可信赖的签名文件,以便服务器不仅可以确认该文件已经被扫描,而且还可以确保在此之后它没有被篡改?正如hemp所提到的那样,这很容易做到,但我没有在你的代码中看到简单的实现。 - RELW
是的,SHA1校验和与有效载荷响应一起提供,因此您可以确保在服务上处理的位与原始位匹配。非常好的问题,通常被人们忽视的是传输过程中的篡改。 - Rafael Ferreira

0

JavaScript在某人的浏览器中运行。这是什么意思?

这意味着:

  • 该人可以完全控制其浏览器正在执行的内容
  • 该人可以阅读文本并更改JS病毒扫描程序

这证明它可能被篡改,因此不能信任。

当您上传文件时,通过HTTP协议进行。这意味着JavaScript在此点之前完成,并且发送到服务器的所有数据对用户可见,用户可以更改它。

因此,如果存在JS上传过滤器,它将固有地不安全,这就是为什么没有JS“杀毒软件”的原因。

您可以在上传后在服务器上查看文件。


有许多方法可以确保某些内容没有被篡改。关键在于实际的病毒扫描必须由可信赖的方进行。一个简单的选择是将病毒扫描服务与您的应用程序分开托管。@Rafael Ferreira的答案提供了一些示例。另一个选择是要求客户端机器安装特定的病毒扫描程序,并将其与您的应用程序集成。这只适用于受控的企业/内部网络环境。 - hemp
@hemp,是什么促使您写下如此详尽的答案,并“解释”如何实现目标?是什么让您知道我不知道这一点,并让您写下评论?我只是真正感到好奇。您阅读了答案,认为“嘿,这个提供与HTTP和JavaScript相关的见解的人显然不知道存在他可以使用的服务,我会去帮助他,因为我觉得他太幼稚了”吗?如果您仔细阅读问题并将精力集中在OP身上,那么我相信他/她会欣赏您的见解和方法。或者您可以写一个答案。 - Mjh
OP问道:“有没有办法在上传文件到服务器之前扫描文件?” 你的回答基本上是“没有”。我只是想澄清一下,即使你说浏览器中的JS不可篡改是正确的,但这是可能的。我没有添加自己的答案,因为它基本上会重复Rafael的。 - hemp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接