分享 Secret Tokens很多人忽略的安全问题

tailang · 发布于 2013年05月10日 · 最后由 jasl 回复于 2013年05月10日 · 2446 次阅读
4357

今天clone了@daqing老师的rabel,准备学习,然后遇到了Secret Tokens error,感谢@iBachue的帮助。然后我搜了一些Secret Tokens资料,发现这是安全问题(作为初学者,我不是非常明白),下面的资料希望对你有帮助:

每一个Rails app都会获取一个很长,而且是随机生成的secret token,当使用rails new的时候,它会被生成并保存在config/initializers/secret_token.rb。里面的内容类似这样: view sourceprint? 1 WebStore::Application.config.secret_token = '4f06a7a…72489780f'

  因为rails自动创建secret token,所以很多开发者会忽略掉它。但是这个secret token就像是你的应用的管理员钥匙。如果你拥有了secret token,那样伪造会话和提升权限就会变得很容易。这是其中一个十分重要而且敏感的数据需要去保护的。加密是保护你的钥匙的最佳办法。

  但是很不幸,rails并不能很好的处理这些secret token。secret_token.rb文件会被加入到版本控制当中,复制到GitHub,CI服务器和每一个开发人员的电脑。

  最佳实践:在不同的环境中使用不同secret token。在应用中插入ENV变量就可以实现这个目的。另外一个替代方法是,在部署过程中把secret token作为符号链接。

  修复:至少,rails必须通过.gitignore来忽略config/initializers /secret_token.rb文件。开发人员在部署的时候,用一个符号链接来替代生产环境的token,或者把初始化器转变为使用ENV 变量来初始化(例如Heroku)

  我将会进一步提出rails创建一个保存serect token的机制方案。我们有大量的库提供安装指引如何把secret token加入到初始化器中,但是这并不是一个好的实践。同时,至少还有俩个解决方案来处理这个问题:ENV变量和初始化器的符号链接。

  rails提供一个简单的API给开发人员来管理secret token,而且后台还是可插拔的(就像缓存和会话存储)。

共收到 10 条回复
3753

@daqing老师使用了figaro做配置管理 gem会自动读取 config/application.yml 里面的 设置
而config/initializers/secret_token.rb里面是设置成了 ENV['SECRET_TOKEN'] 这个所谓的安全问题是常识... 记得开源自己的作品时候 修改一下这个token就好了...

1107

确实容易被忽略,我自己的项目要是开源的话,会自己创建一个私有的版本库,然后重新生成一个全新的token...不过使用者不注意的话 倒是有可能产生安全问题,看来开源到github的时候要考虑这个问题...

3753

#2楼 @jasl 所以一般开源项目的时候 都是把这个选项故意写成错的 别人clone走的时候 运行就报错了 他就知道改了...

1107

#3楼 @zj0713001 其实我有个考虑是准备一个initialize的rake task来...

3753

#4楼 @jasl 你总不能给哪个安全问题都写一个initialize rake task来吧 那就太高端了😄

1107

#5楼 @zj0713001 既然是initialize就是把所有的配置都搞好啊,生成token啊,rename db.yml.sample啊 之类的... secret_token.rb.sample也是个好方法 呵呵

3753

#6楼 @jasl 我觉得daqing老师(大晚上的就不@ 打扰他了哈)的做法挺好的 都写成配置 然后发布的时候写上注释和清空 比较cool

1107

#7楼 @zj0713001 对哦。。。settingslogic也可以用在initializer的。。。不只是这个secret_token,现在用devise的也很多,devise的salt也是应该重新生成的

3753

#8楼 @jasl 看来你说的rake还是有必要加上的 良心rake啊 :thumbsup:

1107

#9楼 @zj0713001 哈哈。。。这事我得记小本上不能忘,话说我已经大量应用rake和generator了 https://github.com/jasl/a_rails_start_up_omakase/tree/master/lib/generators/conf/templates 可以大幅度减少部署的时间

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册