четверг, 18 марта 2021 г.

Модули в Golang: аутентификации модулей

Когда команда go загружает zip-файл модуля или файл go.mod в кеш модуля, она вычисляет криптографический хеш и сравнивает его с известным значением, чтобы убедиться, что файл не изменился с момента его первой загрузки. Команда go сообщает об ошибке безопасности, если загруженный файл не имеет правильного хеша.

Для файлов go.mod команда go вычисляет хеш из содержимого файла. Для zip-файлов модуля команда go вычисляет хеш из имен и содержимого файлов в архиве в детерминированном порядке. На хеш не влияют порядок файлов, сжатие, выравнивание и другие метаданные.

Команда go сравнивает каждый хеш с соответствующей строкой в файле go.sum главного модуля. Если хеш отличается от хеша в go.sum, команда go сообщает об ошибке безопасности и удаляет загруженный файл, не добавляя его в кеш модуля.

Если файл go.sum отсутствует или он не содержит хеш для загруженного файла, команда go может проверить хеш с помощью базы данных контрольных сумм, глобального источника хешей для общедоступных модулей. После проверки хеша команда go добавляет его в go.sum и добавляет загруженный файл в кеш модуля. Если модуль является частным (соответствует переменным среды GOPRIVATE или GONOSUMDB) или если база данных контрольных сумм отключена (путем установки GOSUMDB=off), команда go принимает хеш и добавляет файл в кеш модуля без его проверки.

Кеш модуля обычно используется всеми проектами Go в системе, и каждый модуль может иметь свой собственный файл go.sum с потенциально разными хешами. Чтобы избежать необходимости доверять другим модулям, команда go проверяет хеши, используя go.sum основного модуля, всякий раз, когда она обращается к файлу в кеше модуля. Хеши zip-файлов требуют больших затрат на вычисление, поэтому команда go проверяет предварительно вычисленные хеши, хранящиеся вместе с zip-файлами, вместо повторного хеширования файлов. Команду go mod verify можно использовать для проверки того, что zip-файлы и извлеченные каталоги не были изменены с момента добавления в кеш модуля.


Читайте также:


Комментариев нет:

Отправить комментарий