通过 Chrome 上传文件的潜在问题?

Posted

技术标签:

【中文标题】通过 Chrome 上传文件的潜在问题?【英文标题】:Potential issue with file uploads via Chrome? 【发布时间】:2021-12-15 03:49:54 【问题描述】:

所以我的网站上有一个可以工作的文件上传系统....而且基本上每次有人使用它时它都能正常工作。在少数情况下,用户提交了数据并且页面基本上返回了 php UPLOAD_ERR_NO_FILE,但我只看到通过 Chrome 浏览器发生这种情况(最近的版本是 94.0.4606.81 和 95.0.4638.54)。每次我自己在 Chrome 中尝试时,它都能正常工作,而这些用户从来没有真正沟通过有问题并且不会回来,我只是在日志中看到它已经发生了。我只是想知道是否有人知道任何浏览器扩展或任何可能从 Chrome 的角度干扰此的内容?即在发送之前擦除文件?

我并没有真正使用 Chrome,所以我不太了解它的功能,但我假设它在 HTTP 标头和数据方面并没有真正处理与其他浏览器不同的事情??

我只是觉得奇怪的是有人会尝试上传文件,填写所有其他输入字段,然后按提交但实际上并没有上传文件。备案:

    这不是通过 AJAX,而是直接表单上传 这是 唯一能捕捉到这个特定错误的地方,所以没有其他地方 解释,因为这是我遇到的一个非常具体的错误 远低于 MAX_FILE_SIZE 和 POST_MAX_SIZE 在 php.ini 中,所以它甚至不像服务器正在擦除它们,这 无论如何是不可能的,因为我什至不会走这么远 脚本 每次它总是在同一个地方和同一条线上。我有两个文件上传,一个是可选的(预览图像),另一个是强制性的(zip)。甚至不像他们在预览中上传 zip,因为预览首先经过验证,没有错误..... 但是,不同的下载类别确实会发生这种情况 无法缓存,因为每个请求都会在提交 URL 后附加时间戳

【问题讨论】:

这可能只是 Chrome 的市场份额的影响,或者是一些随机的 bot 伪造用户代理字符串。除非我得到实际的用户报告,否则我不会在意这些。 这让我很困惑,因为这些都是注册用户,所以我已经从他们那里获得了身份验证详细信息....从我收集到的信息来看,这似乎是合法的。这不像是公开提交。不过感谢您的回复。 【参考方案1】:

UPLOAD_ERR_NO_FILE

值:4;没有上传文件。 (ref)

是不是没有文件。

喜欢这个没有选择文件就提交的表单:

<form method="post" enctype="multipart/form-data">
  <input type="file" name="file">
  <input type="submit"> <input type="reset"> 
</form>

因为它是客户端,所以可以有客户端脚本在提交表单时删除文件。例如:

document.forms[0].file.value = ""

魔法?奇怪吗?可能不会,您的表单处理应该处理它。例如。再次显示表单,标记数据丢失/错误的输入,提供可访问的错误消息并使用提交的值填写所有表单字段,以便用户可以轻松修复任何错误,并且不得完全重新填写表单或清除带有重置按钮的整个表单。

您还可以使用客户端脚本镜像客户端的错误处理,以便更快地为用户提供反馈,并且您可以避免往返服务器以解决常见的用户输入错误。

【讨论】:

感谢您的反馈。是的,我确实通过表单处理将错误显示给用户。让我感到困惑的是,因为这些都是注册用户,所以我已经从他们那里获得了身份验证详细信息……从我收集到的信息来看,这似乎是合法的。这不像是公开提交。不过感谢您的回复。 你可能正在猎杀鬼魂。永远不要低估用户错误,尤其是手动输入计算机系统时。只要用户可以恢复他们自己的——就像在你的场景中那样——我不会打扰。将该特定错误放在与其他输入表单错误相同的日志级别。或许可以考虑对特定的文件输入元素进行客户端空字符串检查,以防止提交错误。

以上是关于通过 Chrome 上传文件的潜在问题?的主要内容,如果未能解决你的问题,请参考以下文章

Chrome应用上传失败

通过javascript显示上传百分比,就像chrome的左下角

通过 Dropbox API 上传的文件内容不一致

使用 Valums 在 Chrome 中上传大文件失败

前端图片预览,上传前预览,兼容IE7891011,Firefox,Chrome

React Native InApp浏览器-选择要上传的文件(文件资源管理器),使InApp浏览器仅通过Google Chrome关闭