提高 Ruby 安全性的简单方法
Ruby 社区中的许多人都听说过Rubocop,并且很可能对它又爱又恨。如果您还没有听说过这个经常引起争议的瑰宝,以下是 Rubocop 文档中关于它的主要功能。
RuboCop 是一款 Ruby 静态代码分析器(又称 Linter)和代码格式化工具。它开箱即用,能够严格遵循社区Ruby 代码风格指南中的诸多准则。
然而,Rubocop 的作用远不止强制执行代码风格指南。你知道吗,Rubocop 还可以用于强制执行安全最佳实践!
是的!没错!Rubocop 内置了一套Security Cops,可以帮助你编写更安全的 Ruby 和 Rails 代码。这些 Cops 包括:
- 安全/评估- 使用评估会带来严重的安全风险。
- Security/JSONLoad -由于潜在的安全问题,建议使用 而非 。更多信息请参阅
JSON.parse
Ruby文档。JSON.load
- Security/MarshalLoad - 避免使用
Marshal.load
或,Marshal.restore
因为存在潜在的安全问题。更多信息请参阅Ruby 文档。 - 安全/开放- 使用 Kernel#open 会带来严重的安全风险。
- Security/YAMLLoad -由于潜在的安全问题,建议使用 而
YAML.safe_load
不是。更多信息请参阅Ruby 文档。YAML.load
除了安全警察之外,还有其他一些警察可以提高您的代码安全性。
- Rails/OutputSafety - 使用
html_safe
或raw
可能存在安全风险。经常使用这些可能会导致跨站点脚本漏洞。 - Style/MutableConstant - 不要将可变对象赋值给常量。这样做的安全隐患可能不太明显。例如,如果你不小心用用户数据更新了一个常量,然后该常量被另一个用户使用,就会造成数据泄露。因此,最好确保常量始终是不可变的。
如何只启用安全警察
如果你只想让 Rubocop 用来对付安保警察,而不是那些讨厌的警察 😉,那么你可以这样设置。首先,你需要安装 gem。
gem install rubocop
或者如果您正在使用 Gemfile...
gem 'rubocop', require: false
安装完 gem 后,你需要rubocop.yml
在主目录中创建一个文件来配置它。如果只想启用安全相关的 cops,你的 yaml 文件应该像这样 👇
AllCops:
DisabledByDefault: true
Rails/OutputSafety:
Enabled: true
Security:
Enabled: true
Style/MutableConstant:
Enabled: true
然后您要做的就是运行它!
$ rubocop
有关基本用法的更多提示,请查看rubocop 文档。
编码愉快!😃
文章来源:https://dev.to/molly/one-easy-way-to-improve-your-ruby-security-21mc