新手问题 如果做一个基于的 Rails 开源项目,哪些项目文件属于隐私?

alsotang · 2013年04月28日 · 最后由 xiajian 回复于 2015年04月14日 · 2887 次阅读

今天看资料的时候看到 ActionDispatch::Session::CookieStore 这个东西,它会把 session 的相关信息存在用户的浏览器端然后加个指纹上去。而与加密有关的 secret 保存在 environment.rb 这个文件中。

这么说来,这个 environment.rb 肯定就不能给其他人看到咯,否则就会被攻击者伪造任意 session。

那么我想知道,除了这个 environment.rb 之外,还有哪些文件是属于项目的隐私文件呢?如果项目中用了 CookieStore,devise,mysql,redis 的话。(或更多)

我还原了一下 ruby-china 在我浏览器上设置的 session(抹掉了信息,只保留了格式)

{"session_id"=>"06fd9f57exxxxxxxxxxxxxxxxxxxx0dd", "_csrf_token"=>"eddCzjiFBIeGrrxxWxxxxxxxxxxxxxxxxxxxxps+Hxc=", "warden.user.user.key"=>["User", [1848], "$2a$10xxxxxxxxxxxxxxxKDX.YIpO"]}

首先 session_id 这关貌似就过不了。

_csrf_token 貌似在我们的话题中不是很必要。

warden.user.user.key 虽然表露出我在 User 表中,且 id 是 1848(我是 ruby-china 的 1848 号会员),但是 warden 在后面加了个 digest,所以也无法伪造。


很多时候,如果我们并没有 devise 或者 warden 这样的库的时候,我们会简单地保存 user_id 这个值在 session 中(用的时候,在服务端会取出 session[:user_id])。在这样的情况下,如果不小心暴露了自己的 config/initializers/secret_token.rb 文件,那么,就可以简单地把 user_id 修改为其他人的,并通过适当的算法生成 CookieStore 生成的那个 digest,然后 do evil。

独立开发者的 Web 开发学习成本真的很高啊....不仅前端后端,还要注意各种安全性问题。

Storing nonces in a database table would defeat the entire purpose of CookieStore (avoiding accessing the database).

我来写篇博文发发吧~

自问自答,楼主真性情

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