Какой смысл контрольных сумм внутри рубинового камня - PullRequest
3 голосов
/ 23 сентября 2019

Итак, файл .gem - это tarball, содержащий data.gz metadata.gz и контрольные суммы.Контрольные суммы проверяются до разархивирования data.gz, но я не понимаю сути этого.Кажется, это не дает никакой реальной выгоды для безопасности

Ответы [ 2 ]

3 голосов
/ 23 сентября 2019

Обычно вы просто запускаете gem install somegemfilename, но если по какой-то причине вы решили загрузить гем из https://rubygems.org/gems/, тогда вы захотите вручную запустить контрольную сумму для этого файла.

Пример

Загрузите файл наподобие 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

Одного этого должно быть достаточно для безопасности.Однако кажется, что это дополнительные уровни безопасности, чтобы гарантировать, что каждый файл gz, распакованный с помощью tar xf somegem.gem, может быть индивидуально проверен по содержимому checksums.yaml, который предоставляет несколько вариантов контрольных сумм.

Короткий ответ: вам не нужно беспокоиться о них, но они есть для вас, если вы хотите углубиться до этого уровня.

ОБНОВЛЕНО на основе комментария @ NikitaMisharin:

Да, я понимаю вашу точку зрения и склонен с вами согласиться.Похоже, это очень старый унаследованный код Ruby, введенный в this commit .

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

Я бы хотел заключить, что это был примитивный способ проверки целостности кода, развившийся сиспользовать контрольную сумму, которая будет опубликована на Rubygems.org , стандартном хранилище гемов.

Я полагаю, что это, возможно, было оставлено для поддержки прежних версий?Но я думаю, если вы ДЕЙСТВИТЕЛЬНО хотите быть уверены, возможно, спросите Чед Фаулер ?

Для получения дополнительной информации, возможно, прочитайте эту документацию , которая связана непосредственно с rubygems.org раздел безопасности

0 голосов
/ 26 сентября 2019

Спросил сопровождающего, вот его ответ

Мне кажется, я столкнулся с некоторыми ошибками с усеченными драгоценными камнями, которые RubyGems не смог обнаружить.Добавление контрольных сумм позволило бы RubyGems определить, была ли загрузка гемов завершена успешно и не была ли она повреждена ни во время загрузки, ни во время кэширования на диске.

Контрольные суммы позволяют RubyGems сказать «этот файл поврежден»вместо более запутанной ошибки из-за усеченного файла .gem (.tar), сбоя Zlib и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...