尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

GitHub/InsecureHashAlgorithm 安全指南:rubocop-github 如何拦截 MD5 与 SHA1

GitHub/InsecureHashAlgorithm 安全指南:rubocop-github 如何拦截 MD5 与 SHA1 GitHub/InsecureHashAlgorithm 安全指南rubocop-github 如何拦截 MD5 与 SHA1【免费下载链接】rubocop-githubCode style checking for GitHubs Ruby projects项目地址: https://gitcode.com/gh_mirrors/ru/rubocop-github在 Ruby 项目中使用MD5、SHA1 这类不安全的哈希算法进行密码存储或数据校验是常见的严重安全隐患。GitHub 官方开源的代码风格检查工具rubocop-github内置了一条名为GitHub/InsecureHashAlgorithm的 Cop 规则可以在代码提交前自动拦截Digest::MD5、OpenSSL::Digest::SHA1等危险写法把安全审查前移到编码阶段。本文将从零开始教你理解并配置这条安全规则让项目默认避开 MD5 与 SHA1 的坑。为什么 MD5 与 SHA1 很危险MD5 早在 2004 年就被证明存在碰撞攻击SHA1 在 2017 年也已被 Google 成功碰撞破解。简单说MD5 / SHA1 可被构造碰撞攻击者能伪造出哈希值相同的不同内容不适合密码存储计算速度极快极易被暴力破解不适合签名与完整性校验无法抵御恶意篡改因此GitHub 的 STYLEGUIDE.md 明确要求项目只使用 SHA256 及以上强度的哈希算法。rubocop-github 正是把这一规范固化成自动化检查。rubocop-github 是什么rubocop-github 是 GitHub 官方维护的 RuboCop 扩展插件为 GitHub 的开源与内部 Ruby 项目提供推荐配置和额外规则核心源码与所有 Cop 都放在lib/rubocop/cop/github/目录下其中insecure_hash_algorithm.rb就是本次的主角。它到底拦截哪些写法根据源码与测试用例这条 Cop 会拦截以下几类高风险代码覆盖面非常广危险写法示例结果直接引用 MD5 常量Digest::MD5.hexdigest(str)❌ 报错OpenSSL 下引用 SHA1OpenSSL::Digest::SHA1.new❌ 报错按名称动态调用OpenSSL::Digest.digest(MD5, str)❌ 报错字符串/符号形式Digest(md5)、Digest(:MD5)❌ 报错HMAC 使用弱算法OpenSSL::HMAC.hexdigest(sha1, str)❌ 报错Rails UUID v3/v5Digest::UUID.uuid_v3(...)MD5、uuid_v5(...)SHA1❌ 报错安全的 SHA256 等Digest::SHA256.hexdigest(str)✅ 放行值得一提的是它还会贴心地放行Digest.hexencode、Digest.bubblebabble这类纯编码方法避免误报而uuid_v4随机 UUID也不会被误伤。如何安装与启用安装后即可使用默认配置已经开启该规则在 Gemfile 中加入依赖gem rubocop-github, require: false在.rubocop.yml中继承默认配置inherit_gem: rubocop-github: - config/default.yml运行检查即可看到类似下面的提示C: GitHub/InsecureHashAlgorithm: This hash function is not allowed如何自定义允许的算法默认白名单只包含 SHA256、SHA384、SHA512见config/default.yml与源码DEFAULT_ALLOWED。如果你的团队有特殊场景如兼容老系统可以在.rubocop.yml中覆盖GitHub/InsecureHashAlgorithm: Allowed: - SHA256 - SHA384 - SHA512 - SHA1 # 谨慎仅在确有兼容需求时添加配置改动后OpenSSL::HMAC.new(secret, sha1)这类代码就会被放行。⚠️ 但请务必三思把 SHA1 加回白名单等于重新打开安全漏洞。安全修复的完整替换方案Digest::MD5.hexdigest(str)→Digest::SHA256.hexdigest(str)OpenSSL::Digest.digest(SHA1, str)→OpenSSL::Digest.digest(SHA256, str)Digest::UUID.uuid_v3(...)→ 改用Digest::UUID.uuid_v4或基于 SHA256 的uuid_from_hash密码存储请使用专门的bcrypt/Argon2不要用任何普通哈希为什么它在 CI 中价值巨大这条规则的价值在于自动化与前置化配合 CI 流水线任何一次代码提交里出现 MD5、SHA1构建就会失败并明确提示评审者无需肉眼排查每一行代码。对应的测试覆盖test/test_insecure_hash_algorithm.rb多达数十个场景从常量、字符串、符号到大小写混写Sha1都能识别可靠度很高。小结GitHub/InsecureHashAlgorithm 是 rubocop-github 中最能直接提升代码安全性的规则之一。它默认拒绝 MD5 与 SHA1支持细粒度白名单配置并能穿透字符串、符号、HMAC、UUID 等多种调用形式。对新手而言只需记住一条原则哈希算法默认只用 SHA256 以上剩下的交给这条 Cop 替你把关即可。【免费下载链接】rubocop-githubCode style checking for GitHubs Ruby projects项目地址: https://gitcode.com/gh_mirrors/ru/rubocop-github创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表