Rails 邮箱激活验证疑问

xautjzd · 2013年09月03日 · 最后由 nightire 回复于 2013年09月05日 · 4029 次阅读

近两天在学习 Rails 关于邮箱激活验证的实现,看到网上的实现方法是:

提交注册信息后,同时在数据库中保存激活吗(暂且叫激活码吧),然后同时将其发送到注册用户的邮箱,然后用户再点击带有激活码的链接,在程序中和数据库中存储的激活码做比对,相符则将激活的状态改为true,否则没有激活。

不知道一般的激活验证是不是这种方式?我总感觉这种方式毫无安全性,因为这样可以通过抓取发给注册用户邮箱的包,获取激活码,然后通过 curl 等方式回给服务器虚假信息

程序参考:http://stackoverflow.com/questions/12805523/activate-user-via-email-in-rails

怎么抓取发出的邮件?在机房路由上挂马么?

#1 楼 @huobazi 和用户在同一个局域网内,设置混杂模式都可以抓到吧

如果这种邮件可以被抓取,那可以考虑在验证链接内要求输入注册时留的密码。

#2 楼 @xautjzd 用户的网络安全做不好的情况简直太多了啊。

#4 楼 @huobazi 嗯,安全问题确实多。我发此贴目的其实是想问一般的账号邮箱激活验证是不是这种方式做的

#2 楼 @xautjzd 大部分邮箱是支持 ssl 加密连接的

另外,别人抓取到这个有啥用?帮用户激活?

LZ 多虑了,即使截取到了也没什么用,无非就是帮别人激活而已,也不能得到密码什么的。如果考虑到安全的话,你可以在激活后不直接登陆,而是要求用户再登陆一次。

激活邮件的目的主要还是帮助用户确认注册时输入的电子邮件是对的,如果不对的话他们就无法使用。多以对于激活功能,安全性不是首要考虑的问题,如何帮助用户确认自己的电子邮件可用(包括不可用的时候允许用户替换)才是最重要的。

#7 楼 @nightire 嗯,确实是这情况,其实我本意是想问一般的通过邮箱激活账号是不是通过这种方式实现的。而且我发现一般的账号激活都有过期时间,当过一定时间后,用户没有激活,则表示此链接失效。如果要加过期时间是不是还需加一个类似计时器的东西?不知道 rails 这个是怎么实现的

#8 楼 @xautjzd 不用计时器吧。用户注册的时候有一个 created_at 时间,那么你处理 confirmation 的时候和这个时间做个比较就可以了。

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