我正在寻找一种自动方式来检查基于sinatra的网站中使用的所有宝石,以获取可用的安全更新。这样的事情存在吗?
我对更新的主要态度是:如果没有破坏,请不要尝试修复它。但如果我很脆弱,那么我想知道它。通过仅应用安全更新,我将潜在行为的更改量保持在最低限度。
背景:我以前的大部分工作都是在Drupal。在该社区中,维护人员可以将其模块版本标记为修复安全问题。这意味着我的网站或我的CLI工具可以查询当前网站中使用的模块的发布数据,以查看安全更新是否可用并通知我。
答案 0 :(得分:6)
据我所知,没有确定的自动化方法。 Ruby gem中没有一个标志的概念,表明它们是安全更新等。但是,大多数gem维护者都非常善于遵守版本号major.minor.patch
的约定。主要障碍是API破坏,次要添加功能但向后兼容,补丁用于错误修正或非常微不足道的更改。没有任何强制执行,有些宝石甚至不使用三部分版本号。 Rails本身在这里失败尤其令人震惊; Rails次要版本颠簸是普遍不兼容的,破坏了变化。但是,Rails补丁颠簸往往是安全修复。
如果这足以满足您的需求,您可以使用Bundler指定您只需要补丁级别的更新:
gem 'foo', '~> 2.2.0'
...将安装gem的2.2.x版本的最新补丁级别(例如,最终可能是2.2.12,但不是2.3.0)。
有关版本字符串(由Bundler使用)的更多信息,请参阅the Rubygems docs,以及如何保守(在术语中使用“悲观”)。另见他们的numbering guidelines。再次,请记住,这些都没有严格执行,并且由于Rails本身提供了破坏惯例的可怕例子,其他宝石作者并不总是做正确的事。
答案 1 :(得分:3)
如果您在项目中使用Bundler,则可以检查您是否使用了bundle outdated
的最新版本的宝石。要知道您使用的gem的版本是否具有已知的安全漏洞,您可以使用bundler-audit gem或holepicker gem。还有一项名为Gemnasium的服务可以监控您的宝石,并在宝石更新或出现安全问题时通知您。
更新:Github现在监控您的存储库Gemfile
,并在宝石出现安全问题时通知您。
答案 2 :(得分:2)
有一个名为Gemnasium的网站。它会检查您使用的宝石是否是最新宝石,如果有任何安全问题,它会向您发送电子邮件。
答案 3 :(得分:1)
从github上的rubysec安装bundle-audit gem。定期/定期运行。它是免费的,通过已知安全威胁的CVE库保持最新,并报告项目中的哪些宝石有可用的更新。