在谷歌浏览器上,不完整的下载是否有可能显示为文件?

在谷歌浏览器上,不完整的下载是否有可能显示为文件?

我今天尝试下载了一个.exe。它无法正常运行(签名无效,Windows 拒绝运行,然后兼容模式建议使用 Windows 8.1 模式,然后再次运行失败)。

然后,我决定检查并发现该文件仅重 27 KB,而原始 .exe 应该重 65 MB。

所以我的第一个想法是它被毒了。我把它上传到 VirusTotal,它触发了 comodo 引擎检测规则:Heur.Corrupt.PE@1z141z3。另一个引擎也标记了启发式检测,所有其他检测结果均为阴性。

因此,作为一种启发式检测,它也可能与良性文件损坏一致。

但是,Chrome 从未将不完整的下载显示为有效文件,它始终将其显示为.crdownload,等等。

所以我的问题是:在某些情况下(我正在使用不稳定的连接)Chrome 是否会将未完成的下载显示为有效文件?

我应该有多担心?

答案1

我原本以为可以通过添加 content-length 标头来解决这个问题。但是,Chrome 似乎不尊重 Content-Length 作为下载的验证。

参见此问题:https://bugs.chromium.org/p/chromium/issues/detail?id=501384

从 Mac 上的一些本地测试来看,Firefox 和 Chrome 都不会因下载不完整而导致下载失败。(只有 Safari 会因内容长度不匹配而导致下载失败)

# test case
while true; do; 
  echo "HTTP/1.1 200\ncontent-type: application/octet-stream\naccept-ranges: bytes\ncontent-disposition: attachment; filename="test3.txt"\ncontent-length: 9999\nwrongdata" \
  | nc -l 4444; 
done;

答案2

对的,这是可能的。

我使用 DetectItEasy 反汇编了这两个文件,并检查 27 KB 文件是否完全包含在 55 MB(应该是正确的)文件中。

因此显然这是一个不完整的下载,并且 Chrome 没有标记出来。

我从来没有见过这种行为。

答案3

我不知道 Chrome 如何检查下载并确定其“正确”或“完成”,但我怀疑它是否经常表现出这种行为。

相反,我会假设一些不同的解释:例如,Chrome 可能已完全正确地下载了文件,然后您的防病毒软件检测到威胁并“治愈”了该文件,删除了 99% 的内容。这看起来也很奇怪,但我个人认为这比 Chrome 故障更可能 :)

相关内容