前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2022年03月31日 Go生态洞察:如何减轻供应链攻击

2022年03月31日 Go生态洞察:如何减轻供应链攻击

作者头像
猫头虎
发布2024-04-08 15:05:59
660
发布2024-04-08 15:05:59
举报

2022年03月31日 Go生态洞察:如何减轻供应链攻击

? 摘要

大家好,我是猫头虎博主!今天,我们将深入探讨Go语言在缓解供应链攻击方面的策略。在现代软件工程中,开源软件的重用和协作至关重要,但这也带来了供应链攻击的风险。让我们一起看看Go是如何通过其工具和设计来减轻这些风险的。

? 引言

供应链攻击通过危及软件项目的依赖关系来攻击目标。尽管依赖关系不可避免地涉及信任关系,Go的工具和设计有助于在各个阶段减轻风险。

? 正文内容

? 所有构建都是“锁定的”

Go构建中不允许外部变化(如依赖版本的新发布)自动影响构建。Go模块与大多数其他包管理文件不同,它没有分离的约束列表和锁定特定版本的锁文件。任何Go构建的依赖版本完全由主模块的go.mod文件决定。

? 版本内容永不改变

为确保第三方无法影响构建,模块版本的内容是不可变的。这就是go.sum文件的作用,它包含了每个依赖项的加密哈希列表。go.sum文件不完整将导致错误,且只有go getgo mod tidy会修改它。

? 版本控制系统是真理的源泉

在Go中,包的导入路径嵌入了go mod download获取其模块的信息,直接从版本控制系统中获取,其中标签定义了版本。

? 构建代码不执行代码

Go工具链的一个明确的安全设计目标是,获取或构建代码不会让该代码执行,即使它是不受信任和恶意的。这与大多数其他生态系统不同,后者通常支持在包获取时运行代码。

? “少量复制胜过少量依赖”

Go生态系统中软件供应链风险缓解的最终而且可能是最重要的措施是最不技术化的:Go有着拒绝庞大依赖树和倾向于少量复制以添加新依赖的文化。这可以追溯到Go谚语之一:“少量复制胜过少量依赖”。

? 代码示例

go.mod文件示例

代码语言:javascript
复制
module example.com/my/project

go 1.16

require (
    example.com/other/project v1.0.0
    // ... 其他依赖项 ...
)

go.sum文件示例

代码语言:javascript
复制
example.com/other/project v1.0.0 h1:NeU8...5nw=
example.com/another/project v2.3.4 h1:uHp8...7hR=
// ... 其他依赖项的哈希值 ...
? 总结

Go通过其独特的模块管理和安全措施,有效减轻了供应链攻击的风险。从锁定构建到防止版本内容变更,再到将VCS作为真理的源泉,Go的设计选择在安全方面发挥了重要作

用。

特性

描述

锁定构建

外部变更不会自动影响Go构建

版本内容不变

模块版本内容固定,防止被恶意修改

版本控制系统是真理源泉

包直接从VCS获取,没有包仓库账户的概念

构建不执行代码

获取或构建代码时,代码不会被执行,增强安全性

少量复制优于少量依赖

Go文化倾向于避免庞大依赖树

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2022年03月31日 Go生态洞察:如何减轻供应链攻击
    • ? 摘要
      • ? 引言
        • ? 正文内容
          • ? 所有构建都是“锁定的”
          • ? 版本内容永不改变
          • ? 版本控制系统是真理的源泉
          • ? 构建代码不执行代码
          • ? “少量复制胜过少量依赖”
          • ? 代码示例
          • ? 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com