Homeland 用户的 Email 居然可以随便修改,太可怕了

Peter · 2012年07月12日 · 最后由 Peter 回复于 2012年07月16日 · 7400 次阅读

各位管理员 @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 的城市那随便输入几个中文,看看是不是提交就出错。

#1 楼 @Peter 我试了一下,没有出错。我填写的城市名就是中文的。

我测试了一下 email 账号 确实可以在 编辑资料里面修改 并且不需要 输入确认密码,登陆的时候 是支持 username email 选择登陆的。会出现 很容易被窃取账号的可能性 这里 建议@Peter 可以 采取 devise 的 原生态 做法在修改 user 表的时候 需要输入确认密码,并且启用 email 验证功能 更改 email 需要 对两个 邮箱发送确认信息才算修改 email 成功 否则就不允许新的 email 登陆 这样 安全性就得到了保证 C: @lgn21st @huacnlee

可以试试基于我写的网站开发,没有这个问题 http://codecampo.com/ ,源码 https://github.com/chloerei/code_campo

标题党,是啊,吓得我尿裤子了。

@hhuai 我可不是标题党,如果一个用户可以随便修改 email 这种事不是大事,那另一个问题就更大了,好点一下右下角的“不喜欢?删除此帐号”,好像也不要密码,这下好了,我在公共机器上连别人的帐号都可以删除了。 C @lgn21st @huacnlee

@daqing 我刚才又在另一台机器试了一下,同样的问题,输出结果就是:

We're sorry, but something went wrong. We've been notified about this issue and we'll take a look at it shortly.

#7 楼 @Peter 你说得对,现在各大网站已经用 email 作为用户唯一标识,的确 email 是不应该被修改。cc @huacnlee

支持这个

@lgn21st 谢谢回复,我觉得现在用 login 字段做登录也挺好的,

只要在 account/edit 页面中,把 Email 字段放到修改密码一起就好了,如果新密码和密码确认为空,旧密码和 email 有内容,就可以修改 email.

因为如果从新浪 Weibo 登录,新浪又不提供 email,所以 email 字段是程序生成的 #{provider}+#{uid}@exsample.com , 如果不让用户修改,网站都没办法给用户发 email 了。

另外帐号删除之前也要提供一下密码吧,我刚才用一个新帐号试了一下,随便就 byebye 了,如果我的网站有用户很多记录,这不带来很大的问题吗?

@Rei 我早就关注你的网站了,好像一直没有仔细研究过,第一印象功能上可能没有 ruby-china 丰富。

我再仔细看看,谢谢。

@huacnlee @daqing 我发现问题了,如果输入真实地址,比如说“杭州”,“长沙”就不会有问题,任意英文也没有问题,但任意中文或城市,哪怕是“九寨沟”都有问题,难道输入数据库之前做了什么处理吗?

对不在列表的城市处理有 bug?

#12 楼 @Peter 越简单越好修改

#9 楼 @lgn21st paypal 的邮箱是可以修改的,前段时间把它的邮箱从个人域换成 gmail.

#9 楼 @lgn21st douban 的邮箱也是可以修改的

应该允许修改邮箱。邮箱是唯一,但各种原因会,会换的。建议修改前验证当前操作者对账户和邮箱的拥有权和访问权

邮箱是可修改的,需要密码验证。

而且我认为 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 了。

Peter Ruby China,对!没错!...不好意思,报告个 Bug 提及了此话题。 04月03日 10:56
需要 登录 后方可回复, 如果你还没有账号请 注册新账号