我今天尝试下载了一个.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 故障更可能 :)