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

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

各位管理员 @lgn21st @huacnlee 。。。 你们好

最近想把自己的网站改版, 想来想去, 还是决定在ruby-china的基础上修改算了, 今天发现有个可能算是安全漏洞的问题, 就是用户的email居然可以随便修改, 如果谁在公共机房上网,忘记登出了, 然后别人就可以改email,然后用忘记密码的方法就可以用改过的email重设密码了。

这对ruby-china的用户可能没什么影响, 大不了重注册一个, 但一般来说, 修改密码和修改email都是要提供原密码的, 还是盼望能修复一下这个被我认为是大事的漏洞。

另外, 我不知道哪里没有设置对, 或是我改文件改错了, 现在更新自己的资料时,比如说城市, 如果我写中文就会报下面的错误:

incompatible character encodings: ASCII-8BIT and UTF-8

希望得到大家的帮助, 谢谢!

共收到 19 条回复

哈, 那个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了。

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