今天才想到的,Rails 的 session 是写在 cookie 里面的,比如 Ruby China 的叫 _homeland_session 我们通常为了防止暴力提交内容或采集,或许可以在登陆和注册的时候加入验证码。 但是,实际上是可以模拟 cookie 来提交的,这样就可以跳过登陆了,验证码也不再有意义...
不对吧。session 是随机生成的。基本无法模拟的。如果你的 session 不存在,跳不过去的。如果你已经登录,当然可以继续用你的 session_id 了
不管是在 cookie 里存储完成的 session 信息还是只存 session_id 都有这个问题。解决方法,要么就是每次操作都加验证码(这个就有点恶了),要么就是限制单位时间内的操作次数
我说的不是把验证码放那里,而是登录完了以后 user_id (表示已登录) 拿破解者在浏览器上面登录以后,直接把整个 _homeland_session 拿起作为 cookie 内容提交
哦,写道这里我想到了,没有这个隐患,session_id 是不同的,拿去也没用。
可以参考 redmine,把生成 secret_token.rb 从版本控制中去掉,然后写个 rake 任务来生成这个文件。在部署前执行这个命令。见 https://github.com/edavis10/redmine/blob/master/lib/tasks/initializers.rake
Redmine 是 2.3 的