吴浩

2015-12-07 02:22

ke.qq.com接入登录态隔离总结

本文作者:IMWeb 吴浩 原文出处:IMWeb社区 未经同意,禁止转载

一、接入登录态隔离背景

目前腾讯的web业务都是共享skey作为登录态凭证,skey这个cookie打在*.qq.com一级域名下,被qzone.qq.com、mail.qq.com、t.qq.com等各web类业务共享。一旦某个业务出现xss漏洞,恶意脚本可能访问其他所有以skey为登录凭证的web业务的接口,例如广发微博,或者盗取用户邮件正文等私密信息;恶意脚本还能收集skey这个票据,然后伪造请求,达到窥探用户隐私或者发送广告的目的。登录态隔离,通过公司统一登录平台(ptlogin)下发业务私有的p_skey作为用户登录态凭证,不再让skey成为畅游qq各业务的通行证,有利于大幅降低xss漏洞的影响。

二、接入隔离的改造点

1.请求ptlogin登录框增加daid参数

访问qqlogin.oa.com,申请加入登录态隔离白名单,申请成功将得到一个daid,该ID与域名绑定,如ke.qq.com申请的daid=233。请求登录框url中应该明确给出daid参数,这样才能确保ptlogin会种p_skey到业务域名下的cookie中。

2.申请ptlogin4.ke.qq.com域名

申请ptlogin4.ke.qq.com域名,cname到ptlogin2.qq.com。解释一下:

1)为什么要申请ptlogin4.ke.qq.com?

p_skey是通过服务器http响应种到ke.qq.com下的,那么自然能想到只有对ke.qq.com及其子域*.ke.qq.com的请求才可以这样种。那么,为什么不是对ke.qq.com请求,主要考虑业务之间的解耦。

2)为什么cname到ptlogin2.qq.com?

如果直接将ptlogin4.ke.qq.com解析到ptlogin的接口机,这个运维的效率将会非常低,一旦ptlogin的接口机变更时,得对域名解析做大批修改。

3.终端替ptlogin给页面种登录态

终端替ptlogin给页面种登录态skey时,需要补上p_skey。另外,客户端需要跟版本,旧版本内嵌页面发出的请求没有p_skey,后台鉴权的时候要兼顾新旧版本。

4.业务后台验证逻辑修改

1)pcweb only的接口强制验p_skey,验证不通过的时候弹登录框;终端种p_skey有版本普及的过程,无p_skey的时候强制弹登录框的话体验较差。所以,版本普及期间优化验证p_skey,skey次之。对这部分接口,只要有一个key验证通过,就算有登录态。

2)p_skey或skey生成的Csrf token都要能通过验证

3)监控请求缺p_skey的量,推动版本普及速度,及时调整验证策略。

5.退出logout

在退出的时候,因superkey在ptlogin2.qq.com域名下,业务没法拿到。清不掉superkey(具有联盟关系的业务跳转时,需要用到),就没办法真正退出,所以,必须前台调用ptlogin2.qq.com域名下的CGI,才能清除掉superkey。需要引用ptlogin提供的工具:https://ui.ptlogin2.qq.com/js/ptloginout.js

三、一些细节需要注意

1.页面(jsonp)调第三方提供的公用接口时,csrf token只能skey生成,不能一概使用p_skey。第三方接口使用的域名一般不是ke.qq.com,所以服务器拿不到p_skey来生成csrf token与请求中的token比对。

2.为了复用现成的接口,终端可能直接调用CGI,这时不要忘了带p_skey。 如收藏课程接口http://ke.qq.com/cgi-bin/fav/add

3.如果业务需要“更换帐号”的功能,在接入隔离后请注意给login请求添加一个参数pt_no_auth=1,表示要求必须展示登录框,取消自动登录逻辑,避免因已存在登录态而又重新跳回业务页面。

4.客户端(内嵌)跳出到浏览器时,为将客户端登录态clientkey转换成页面的登录态p_skey,俗称ptlogin带登录态跳转,这时需要设置登录跳转名的隔离属性生效。下面链接中的course就是登录跳转名:https://ssl.ptlogin2.qq.com/course

5.登录态不一致如何处理?比如ke.qq.com接入登录态隔离,登录后会种下uin与p_uin,二者都是8888xxxx。然后,用另一个帐号9999xxxx登录腾讯网(非隔离业务),此时再回到ke.qq.com页面uin=9999xxxx,p_uin=8888xxxx,二者不一致。按理来说后台验证(p_uin,p_skey)是有效的,但是如果按照已登录逻辑来处理请求,可能不符合用户预期,所以,uin与p_uin不一致时也要重新弹登录框,让用户确认操作帐号。

0条评论

    您需要 注册 一个IMWeb账号或者 才能进行评论。