str = "
puts str.inspect # => "
旧的不去新的不来,找个新的对象寄放和释放一下感情,慢慢把旧的给忘掉掉。至少也不要那么痛。
不要消沉地过日子,多主动参与集体活动,在集体活动中让自己的能力被别人肯定,慢慢找回自己的自信。
切忌沉迷烟酒或游戏。
#45 楼 @gaicitadie 做『后继有人』的感想。:)
#42 楼 @fresh_fish #43 楼 @kewin 没错...已经是赤裸裸地白热化歧视了...
#28 楼 @x290431695 对的,而且这个列表搭建起来之后,一度有人想把人继续 fork 出去.....
#20 楼 @chunlea #22 楼 @tiseheaini 可以麻烦给多点资料吗?我一个个去人肉很痛苦诶....
我目前在学校,电信封了路由器,而我的笔记本插不了网线,于是用的是校园网 Wi-Fi。我今晚想帮一个 Weibo API 项目提交点代码,发现 GitHub 上不去,于是作罢。
Chart.js ?
#7 楼 @KoALa #8 楼 @zgm 如果改用 redis 来存储的话,那么本地只会保存一个 session_id,其他的内容都会保存在 redis 里面,也就不存在暴露数据的问题了。不过我的看法是,用 Rails 原生的这个 CookieStore 都好了。理由如下:
不知我文中还有什么解释不清楚的地方,可以留言交流交流,我也是正在学习当中。:)
#4 楼 @zlx_star 是可以成功的。因为 CookieStore 之所以效率高正是因为 session 的相关信息都存在了用户的浏览器这里,服务器那边因此就不必通过任何 database 就可以取到特定 session 的 data 了。
可是存在用户浏览器这里的 data(以 marshal 之后 的 hash 形式存在,并用 base64 编码)是没有加密的,于是用户可以随意改动。为了保持数据的完整性,Rails 就会在用户浏览器的 Cookie 中再保存一段 digest,到时候如果用户更改了 session data,那么 digest 就会不一致导致验证无法通过,从而确保完整性。
而这个 Cookie 中的 digest 是怎么算出来的呢?可以认为是通过一个函数,这个函数接受 session_data_hash 和 secret_token 两个参数。
当 session_data_hash 可以被改动,而 secret_token 又被泄漏时,那么只要按照上述的生成过程再次生成一下 Cookie 中的 digest,服务器就会相信浏览器这边改动后的新 session 了。毕竟服务器是没有保存任何相关信息的。
我来写篇博文发发吧~
Storing nonces in a database table would defeat the entire purpose of CookieStore (avoiding accessing the database).
独立开发者的 Web 开发学习成本真的很高啊....不仅前端后端,还要注意各种安全性问题。
以上提到的『适当的算法』在此:https://github.com/joernchen/evil_stuff/blob/master/ruby/sign-cookie.rb
ruby-china 的 secret_token.rb 在此:https://github.com/ruby-china/ruby-china/blob/master/config/initializers/secret_token.rb
我还原了一下 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。
#58 楼 @zzhattzzh 可能是因为之前被一家创业公司拒了之后,有点挫败吧....不过到了社区这里,发现还是有蛮多机会可以选择的,倒也柳暗花明又一村了。:)
#55 楼 @andor_chen 相对同龄人来说,真的敢这么说。