即使对于开源项目,如果任何rails项目的源代码都应该被遮挡,该怎么办?

时间:2011-01-25 23:22:51

标签: ruby-on-rails ruby-on-rails-3 open-source github

这是一个很难搜索的人。如果我有一个开源的rails web应用程序项目,其源代码是公共托管的,就像在GitHub上一样,如果该应用程序要在公共网站的生产中运行,那么应该隐藏或交换哪些信息?我的假设是,config / initilizers / secret_token.rb,任何认证腌制内容和数据库登录信息等内容在生产中不应与开发中的相同。应该采取哪些其他预防措施来确保生产场地不易受到摆弄会议或其他我不考虑的其他人的影响?

2 个答案:

答案 0 :(得分:13)

特定于Rails的敏感信息来源

清除敏感信息:

  • config/environments/*.rb
  • config/initializers/cookie_verification_secret.rb
  • config/initializers/secret_token.rb
  • config/initializers/session_store.rb
  • 为支持第三方库而添加的任何文件,例如config/memcached.yml
  • config/database.yml
  • db/seeds.rb
  • lib/tasks中的任何佣金任务。
  • test/fixtures/*

常规更改

包括这一点只是因为我认为这是一个很好的清单,要记住发布你在生产中也有的开源软件。

  • 删除敏感信息:
    • 密码盐
    • 由代码或种子填充的默认用户凭据
    • 任何外部服务器或服务的身份验证信息
      • 数据库
      • 第三方API
      • 电子商务解决方案
    • 任何可能宣传商业机密的种子数据
  • 彻底测试代码以获取漏洞利用。如果它们在您的代码中,并且您的代码可供公众使用,那么人们就会找到它们并知道如何危害您的网站。
  • 清理代码。该代码是您网站的一种宣传形式;这是代表您的网站/公司的众多事情之一。确保你更改变量/功能名称/错误消息/种子数据/等等,这些都是用幽默或挫折写出的,但对公众来说看起来很糟糕。
  • 积极地为项目提供增强功能和错误修复,并响应外部修复/增强请求,甚至为那些自己解决问题的人提取请求。这使项目保持活跃,并有助于宣传角度。
  • 确保您在信用到期时给予信贷。既然您的代码是公开的,那么人们就会知道您是否使用了第三方代码/库。如果此类代码在其许可协议中附带归属条款,请确保您的项目符合这些协议。

答案 1 :(得分:1)

Shaun之前的回答是非常彻底的。

此外,我还建议您使用.gitignore,以避免提交包含敏感信息的文件。

任何包含API密钥或密码等的文件都应该在.gitignore中。通常,这包括:

database.yml
log/*
tmp/*

如果您将API密钥分配给代码文件中的常量,我建议将所有API密钥,密码等放入site.yml文件中。然后将此文件添加到.gitignore并添加初始化程序以将此文件解析为常量。使用该常量来访问秘密数据。

例如:

配置/ site.yml:

hoptoad_api_key: ABCDEF1234567890

配置/初始化/ 01_site.rb

SITE = HashWithIndifferentAccess.new(YAML.load(File.open(File.join(Rails.root, 'config', 'site.yml'))))

配置/初始化/ hoptoad.rb

HoptoadNotifier.configure do |config|
  config.api_key = SITE['hoptoad_api_key']
end

请注意,初始值设定项按字母顺序运行。如果在其他初始值设定项中需要SITE常量,请务必将读取配置的文件命名为前导号,以便首先运行它。

为了对开源项目更加用户友好,您应该在自述文件中包含一个带有示例的database.yml.sample和site.yml.sample文件和/或解释所需的配置。