很长一段时间以来,我一直认为,只要服务器上没有损坏并且 http 协议的实现是正确的,就不可能通过 http 下载损坏的文件,这很可能是现代主流软件的情况。
因此,当我看到一个下载站点提供了他们提供的下载文件的 md5 哈希值时,我总是会笑。我以前从未见过这样的情况,我下载文件时,大小正确但内容不正确。
嗯,今天,我遇到了第一个这样的案例。我下载了一个 Ubuntu 的 iso,试图安装它,但它失败了,经过长时间的研究(我简直不敢相信原因可能是下载损坏)我检查了 MD5,你知道什么,这是错误的(大小是正确的)。所以我重新下载了它并得到了另一个错误的 md5。只有在我第三次下载时,md5 才正确。
所以我的问题是,假设实现正确,传输成功完成并且服务器上的文件正确,原则上是否有可能通过 http 获取损坏的下载。如果这是可能的,那么这怎么会发生呢?
use*_*686 10
是的,这是可能的,尤其是在质量较差的 Internet 连接上——通常是无线连接,但某些有线连接(例如我的连接)在高速时也有很高的错误率。
HTTP 协议没有任何用于确保数据完整性的规定。在传输层,TCP确实通过使用校验和进行错误检测,但它不是很可靠。
提供散列或数字签名还有另一个原因。通常,实际文件分布在许多镜像服务器上,不能保证 100% 安全。如果没有要验证的哈希或签名,可以访问镜像的人(不一定是合法的)可以替换文件并保持不被检测到,而不必闯入托管网站的完全不同的服务器。
如果您通过 BitTorrent 而不是 HTTP 下载 Ubuntu,您可以获得文件的自动验证。(每个片段在下载时都经过验证,因此您无需重新下载整个内容。)
| 归档时间: |
|
| 查看次数: |
5020 次 |
| 最近记录: |