【问题标题】:identify malicious file upload in javascript识别 javascript 中的恶意文件上传
【发布时间】:2018-08-02 09:00:57
【问题描述】:

我在 java 脚本中上传文件有问题。例如,如果您有客户端验证来检查文件上传的 MIME 类型。任何人都可以将文件重命名为正确的类型并更改 MIME 类型并上传。所以验证不起作用? 例如:在客户端,我正在检查文件是 pdf 类型。所以任何人都可以将 exe 文件重命名为 pdf 并上传到服务器。有没有办法在客户端验证这些场景?

谢谢

【问题讨论】:

  • 您甚至无法保证您的客户端代码正在用于将文件发布到您的上传 URL,所以不能。您必须在 服务器 上验证文件。
  • 不要想太多。一旦文件从 .exe 重命名为 .pdf ,它将只是一个无效的 PDF 文件,除非有人将其重命名为 .exe,否则它不会突然执行。
  • 为了扩展@Pointy 的评论,客户端验证是一种礼貌,可以让您的用户体验更好。服务器端验证是确保应用程序安全的必要条件。任何设计良好的系统都应该始终做到这两点。
  • 您应该考虑在客户端按扩展名进行过滤,例如帮助用户查找文件,例如,如果他们正在查找文档,则不包括图像,但从不作为验证,您必须验证服务器中的所有内容一边。
  • 服务器端验证很重要。使用正确的 mime 类型。安全应该是您的首要任务,而不仅仅是添加花哨的不安全功能。

标签: javascript php jquery asp.net html


【解决方案1】:

不,这在客户端验证中是不可能的,因为您甚至无法确定客户端代码是否已运行。

每个现代浏览器都可以禁用或修改 JavaScript。依靠客户端验证来确保安全是非常糟糕的做法,并且只能用于改进用户体验,例如告诉用户他们选择的用户名已经被使用等。

您需要做的是验证服务器上的文件。鉴于您提到了 PDF 文件,我建议您使用库来解析它们并验证用户确实在上传有效的 PDF。

【讨论】:

  • 感谢您的回答。如果用户必须在上传之前验证文件怎么办?
  • 取决于您所说的“验证”以及您想要阻止的内容。如果您想阻止攻击者上传恶意内容,则无法使用客户端代码阻止它们,因为它们不符合您的规则。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 2019-01-14
  • 2013-01-23
  • 1970-01-01
  • 2015-05-09
相关资源
最近更新 更多