前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ke.qq.com接入登录态隔离总结

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

作者头像
IMWeb前端团队
发布2017-12-28 18:23:22
2.6K0
发布2017-12-28 18:23:22
举报
文章被收录于专栏: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不一致时也要重新弹登录框,让用户确认操作帐号。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、接入登录态隔离背景
  • 二、接入隔离的改造点
    • 1.请求ptlogin登录框增加daid参数
      • 2.申请ptlogin4.ke.qq.com域名
        • 3.终端替ptlogin给页面种登录态
          • 4.业务后台验证逻辑修改
            • 5.退出logout
            • 三、一些细节需要注意
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档