1
loading 2014-02-18 14:17:34 +08:00 via iPhone
邮件里连接直接点,谁管长不长。
btw:你md5每次都算啊…不也存起来吗? |
2
wingoo 2014-02-18 14:18:20 +08:00
新增一个验证表, 主键为guid, 其他字段可以为user_id, 过期时间等
|
3
jayn1985 OP @loading 你说每次都需要计算MD5,原因是如果用户更改了link中的email或者ts,那你在server端仍然需要计算一下当前计算出的MD5值和传来的token值是否匹配吧,否则你怎么验证用户没有更改你的激活链接呢?
|
4
justfindu 2014-02-18 14:53:46 +08:00
@jayn1985 验证email和token search一下sql ,带上token过期时间的条件 没有就说明不是正确用户
|
5
lichao 2014-02-18 14:56:01 +08:00
我觉得只需一个 token 就行,其它的都多余
|
8
jayn1985 OP @lichao 你的意思是加张表或者是在User表里面加个字段存这个token么?那用户激活成功了的话,这个信息之后还有用么?如果没有用的话,这样设计是不是代价高了些?
|
10
dorentus 2014-02-18 15:19:57 +08:00
单独加张表放 token,用完删。怕慢就用 redis 之类的存。
这个代价不高的;等你在这个地方遇到瓶颈的时候,你的系统的其它部分估计都已经遇到过 n 次瓶颈、重写多遍了…… |
11
jayn1985 OP @lichao 我在网上搜了相关文章,很多也都是类似你这样的设计,我很想知道这种设计的原因,是因为很难构造出一个健壮的方式来避免安全问题么?抱歉想得太多,呵呵~
|
12
vob636 2014-02-18 15:37:24 +08:00
@dorentus +1用完肯定删……@jayn1985 楼上的已经很健壮了……各种token了……是在不行,你加上https……
|
13
jayn1985 OP @dorentus 感谢回复,加表后对其操作确实代价不大,但是我总觉得因为这么一个不算大的feature而要新增一张表,这个有点“杀鸡用牛刀”的感觉:)也许在不新增新的实体的前提下,来做这个email校验确实没有完全周到的想法(我自己设想的方法可能确实有漏洞,但是不是做安全出身的所以目前还没看出来。。)
|
15
family 2014-02-18 15:46:16 +08:00 via iPhone
直接加字段或表 有时间纠结的功夫多达游戏
|
18
ksc010 2014-02-18 16:10:11 +08:00
突然想到一个问题,把点击放到email中
QQ这样的邮件服务商会不会为了安全原因访问这个url? 目前看来来应该没有这种情况 |
19
ksc010 2014-02-18 16:13:22 +08:00
也可以放到session
但是有个问题会话结束后 链接就失效了 换个浏览器也不行 |
20
cevincheung 2014-02-19 01:05:02 +08:00
你的方案完全可以啊。连接直接点就是的。不用管长度。参考一下其他厂商的邮件范本就 可以了嘛。
http://domain.com/verify?email=x&ts=x&sign=x 服务端保存一个公共密钥。这样sign的值也根本不需要保存。ts可以用来判断连接是否过期,而且这个过期时间可以自己随意控制。 |
21
jayn1985 OP |
23
lygmqkl 2014-02-19 19:54:25 +08:00
其实有没有考虑过使用user表内的一些不变元素来实现这个功能? 比如说 MD5(email.password) 在用户不修改密码的前提下,只需要增加用户的id 到 verify url 就可以了类似 lee.com/v/1/hashstring 因为在你生成验证之前用户已经保存了,可以额外增加一个字段比如 user_active = 0/1/2 0-new 1-actived 2-blocked.
|
24
geew 2014-02-20 09:20:42 +08:00
楼主的方法和我现在用的方法是一样的, 其实这样就够了, 达到目的就行. 然后其他的方法虽然可以让URL看起来清爽点, 但其实差不多. 比如那个建立一张表的方法, 感觉没有必要, 毕竟验证结束了就没啥用了, 感觉浪费了. PS: 这个问题真心不需要纠结....
|
25
geew 2014-02-20 09:24:24 +08:00
|
27
jyhmijack 2014-02-20 12:15:26 +08:00
自从全部使用uuid之后,更加幸福了
|
28
jyhmijack 2014-02-20 12:15:56 +08:00
用redis缓存住token对应的uid,过期时间就好了
|
29
phpcxy 2014-02-20 14:02:04 +08:00
我现在也是楼主这样的方案,邮件里面给一个按钮他点击。
|
30
drivel 2014-02-20 16:16:07 +08:00
|