各位管理员 @lgn21st @huacnlee 。。。 你们好
最近想把自己的网站改版,想来想去,还是决定在 ruby-china 的基础上修改算了,今天发现有个可能算是安全漏洞的问题,就是用户的 email 居然可以随便修改,如果谁在公共机房上网,忘记登出了,然后别人就可以改 email,然后用忘记密码的方法就可以用改过的 email 重设密码了。
这对 ruby-china 的用户可能没什么影响,大不了重注册一个,但一般来说,修改密码和修改 email 都是要提供原密码的,还是盼望能修复一下这个被我认为是大事的漏洞。
另外,我不知道哪里没有设置对,或是我改文件改错了,现在更新自己的资料时,比如说城市,如果我写中文就会报下面的错误:
incompatible character encodings: ASCII-8BIT and UTF-8
希望得到大家的帮助,谢谢!
哈,那个 ASCII-8BIT and UTF-8 的 Bug 我一个晚上也没搞定,刚才试了一下,原来官网也这样,
大家可以在这个页面 http://ruby-china.org/account/edit 的城市那随便输入几个中文,看看是不是提交就出错。
可以试试基于我写的网站开发,没有这个问题 http://codecampo.com/ ,源码 https://github.com/chloerei/code_campo
@daqing 我刚才又在另一台机器试了一下,同样的问题,输出结果就是:
We're sorry, but something went wrong. We've been notified about this issue and we'll take a look at it shortly.
@lgn21st 谢谢回复,我觉得现在用 login 字段做登录也挺好的,
只要在 account/edit 页面中,把 Email 字段放到修改密码一起就好了,如果新密码和密码确认为空,旧密码和 email 有内容,就可以修改 email.
因为如果从新浪 Weibo 登录,新浪又不提供 email,所以 email 字段是程序生成的 #{provider}+#{uid}@exsample.com , 如果不让用户修改,网站都没办法给用户发 email 了。
另外帐号删除之前也要提供一下密码吧,我刚才用一个新帐号试了一下,随便就 byebye 了,如果我的网站有用户很多记录,这不带来很大的问题吗?
邮箱是可修改的,需要密码验证。
而且我认为 username 也是可修改的,否则 github 登录的用户名太难看了。
第 3 方登录还有一些问题没考虑好,比如必填字段缺失了怎么办(我建议进入表单页面而不是填随机值),登录状态绑定第 3 方的时候返回的是已绑定的帐号怎么办,一个用户可不可以绑定多个第 3 方帐号……诸如此类的问题。不过 Ruby China 主要是想促进交流,把帐号系统搞得那么复杂有点得不偿失。
现在随机 email 和密码的结果是,如果修改邮箱需要密码,那么第 3 方登录的用户既不能修改邮箱也收不到密码重置邮件。
不过我也没时间改这块地方。
@Rei 只要在 users 表加个字段就可以了,比如说 provider, 初始值为 0
用户用第三方接入后,如果 provider 为 0,那就把 /account/edit 的修改密码的表单放在最上面,把“原密码”换成“用户名”,强制用户修改用户名,设置密码,修改完,provider 置为 1, 如果修改之前用户去其它的地方,redirect_to“/account/edit”
修改完之后,检测到 provider 为 1,就把 /account/edit 的修改密码的表单复原,这样用户可以修改密码,用户名就不让修改了。
有了密码,就可以允许用户修改 email 了。