红宝石内部的校验和有什么意义



所以.gem文件是包含数据.gz元数据.gz和校验和的压缩包。校验和在数据未存档之前.gz被验证,但我不明白这有什么意义。它似乎没有提供任何真正的安全优势

通常您只是运行gem install somegemfilename但是如果您出于某种原因选择从 https://rubygems.org/gems/下载 gem,那么您将需要手动运行该文件上的校验和。

下载类似 https://rubygems.org/downloads/foo-0.0.2.gem 的文件 然后在您的终端中转到下载并运行文件的任何位置:

sha256sum foo-0.0.2.gem
# it should output the same checksum shown at https://rubygems.org/gems/foo
=> 523009a5b977f79c8eaa79b521e416f26482bc4fbbcc04bd08580696e303a715

仅此一项就应该足够安全。 然而,这些似乎是额外的安全层,以确保tar xf somegem.gem解压缩的每个gz文件都可以根据提供多种变体校验和的checksums.yaml的内容进行单独检查。

简短的回答是,您不必担心它们,但是如果您想深入到该级别,它们就在那里为您服务。

根据@NikitaMisharin的评论更新:

是的,我明白你的意思,并且倾向于同意你的看法。 看起来这是非常古老的遗留 Ruby 代码,并在此提交中引入。

commit 9ac0e9149295f356f3aee2e6a7c3a4e22d0a904e
Author: Chad Fowler <chad@chadfowler.com>
Date:   Sun Nov 23 01:53:27 2003 +0000
Generate MD5 checksum for gem and store it in the file.  Will be used to validate gem file before installation.

git-svn-id: svn+ssh://rubyforge.org/var/svn/rubygems/trunk@66 3d4018f9-ac1a-0410-99e9-8a154d859a19

我倾向于得出结论,这是一种检查代码完整性的原始方法,自从使用将在标准 gem 存储库 Rubygems.org 上发布的校验和以来,这种方法已经发展起来。

我想这可能是为了遗产支持而留下的?但我想如果你真的想确定,也许问查德福勒?

有关更多背景信息,请阅读此文档,该文档直接链接到 rubygems.org 安全部分

问维护者,这是他的答案

我相信我在截断的宝石中遇到了一些 RubyGems 无法检测到的错误。 添加校验和将允许 RubyGems 确定 gem 下载是否已成功完成,并且在下载期间或缓存在磁盘上时是否未损坏。

校验和允许 RubyGems 说"此文件已损坏",而不是由于截断的 .gem (.tar( 文件、Zlib 故障等而导致的更令人困惑的错误。

最新更新