[转]http://www.zhihu.com/question/20218136/answer/16246633
1. 首先用户基本能够完成自动登陆流程
重新启动客户端/浏览器, 不需要输入密码可以登陆
重启设备后依旧可以自动登陆
2. 用户更换网络环境自动登陆有效
同一设备采用有线网络,无线网络,临时中断网络不影响规则1的逻辑
*安全系数较高的业务可能对ip有自动进化的白名单, 此时规则2呈受限状态
3. 用户更改密码后原有的自动登陆失效(包括且不限于本机的自动登录)
保证被盗用后/在其他机器上登陆过的信息可以远程"挂失"
4. 可取消
用户的登出(明确的Logout)操作使原有的自动登陆失效(包括且不限于本机的自动登录)
并且可以关闭自动登陆/记住密码
重新安装软件/客户端必须是失效的(否则你手机卸载了陌陌,回家老婆重装一次居然可以自动登陆,后果就....)
接下来是安全层面的讨论
5. 不可逆(针对本地的token/票据/认证)
token(理论级)不可逆向出除用户id以外的信息,包括不限于 账号,密码,登陆ip
6. 不可猜测/碰撞
简单测试:当存在100w有效token时,token值域内随机生成1w个新token不能出现碰撞
为什么是1w个? 因为token的验证是需要有网络开销的. 当短时间内出现1w个密集请求的时候如果你还不能发现攻击, 只能说明你的系统监控太差了(连流量图上都该出突尖了)
7. 有时效性
token不可以长期不变可用, 否则规则6将会在可预见的时间内失效
推荐不超过1个月(现在已经大都是1周). 具体可以参考各个站点的设计
如果需要长期保留可以采用换票(重新签发新的token)的方式来延续自动登陆
8. 不可被拦截盗用*
假设当前网络为非安全信道, 消息可被监听. 监听者盗用token不能使用.或者监听者无法盗用token(不能从网络包中分析出具体的token). 简单说就是采用https协议可以快速透明的解决问题
.
以下提供几个简化的版本, 建立在黑客没有刻意针对服务进行攻击的前提下, 做到基本的保护. 这样盗用的门槛则提高到,加密代码被获取进而解密的门槛高度.
标准版:常用ip白名单
其中规则2的高级情况也可以起到一定程度的限制作用, 但无法抵御对大型区域网路(公司网络, 学校网络, 小区网络)内的攻击.
廉价版(https是要钱的): token拥有时间戳信息加密.即通信层面上的token是每次都在变化的
可达到屏蔽公共wifi这类实时全面截包进行攻击的情况
极简版:token每5min换票一次.
可达到非全面截包(局域网出现临时的arp攻击这类)情况下, token被发送到攻击者邮箱后, 未来某一时刻被利用来攻击的情况.
建议
规则1~4是最基本的, 完成不了的根本就不达标
对于尚未拥有可观收益的服务, 只要完成1~6就够了. 属于及格状态. 能攻击的人不来攻击, 这个服务就可以说是"绝对安全"了
反之则连规则8也得完成. 属于良好状态
终极规则9
社会工程学层面的安全防御.(应对所有已知的即将知道的软件/框架/协议漏洞 )
到达此级别的必须得是可以上市级别的公司(或者有实力巨额出售自己)提供的服务了. 当网络上出现高手通过特殊手段(比如最近的Heartbleed漏洞)直接获取到token信息甚至是密码时, 可以
第一时间的得到白帽(乌云/圈子里)的帮助与支持.甚至是收买说服将要攻击的黑客. 达到这个标准的才可以成为真正优秀的状态.
究极规则10
推卸责任(应对出现撞库攻击的情况 如最近的iCloud,Gmail)
当服务出现安全问题, 并已经产生严重后果/损失时. 找到公关部门,发布安全公告, 发表声明, 严厉谴责漏洞利用者. 并一定要说明,同行现在差不多都是这个样子,不会好只会更差.最好能说
成是全世界的厂商都有这个问题. 可以的话说明一下人类的智慧暂时不能解决这个问题也是可以的. 顺带附上一个很小的数字, 说他们是受到影响的. 我们已经通知他们改密码了. 至于损失
的赔偿么, 游戏公司的运营可以考虑一下. 其他企业不建议给, 否则有认错被抓把柄的风险.
当达到这个状态时, 差不多可以说"Everything Is Under Control"了. 完美状态.