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

一、接入登录态隔离背景

目前腾讯的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 条评论
登录 后参与评论

相关文章

来自专栏上善若水

044android初级篇之android app中的权限及自定义权限

如果自定义的软件中因对外提供什么服务,而想声明一个权限,来限制此服务的使用,可以在Manifest中,声明权限。

1083
来自专栏玄魂工作室

CTF实战2 Web应用构成

https://www.bilibili.com/video/av22207039/

742
来自专栏架构师之路

网页端收消息,究竟是推还是拉?

抛开这些技术细节不谈,暂且认为服务端对每一个用户都有一个“待收消息”的队列,里面存放了需要给这个用户的一切消息。

852
来自专栏互联网杂技

【小教程】教你拿出app中的图片资源

有一种方法通过ipa或apk包来获得每个资源的切图,今天就来简单介绍下。因为有的同学还不知道这个方法,尤其是没有技术背景的同学(我司UI妹子得知这个方法如获至宝...

2585
来自专栏别先生

Redis 集群搭建详细指南

最近有朋友问了一个问题,说毕业后去大城市还是小城市?去大公司还是小公司?我的回答都是大城市!大公司! 为什么这么说呢,你想一下,无论女孩男孩找朋友都喜欢找个子...

822
来自专栏黑白安全

Github寻找敏感信息

0x01 引子 先给不知道什么是Github的朋友们科普一下什么是Github Github是一个分布式的版本控制系统,目前拥有140多万开发者用户。随着越...

1342
来自专栏xingoo, 一个梦想做发明家的程序员

RequireJS实例分析

  随着JS越来越庞大,已经不仅仅是以前复制粘贴做特效的时代了,JS越来越偏向于业务逻辑与应用。恰逢Node的流行,JS在web开发中占有越来越重要的地位。由...

1785
来自专栏技术墨客

React前后端同构防止重复渲染 原

为了解决某些问题(比如SEO、提升渲染速度等)react 提供了2个方法在服务端生成一个HTML文本格式的字符串。在得到了这个HTML格式的字符串之后,通常会将...

621
来自专栏xiaoheike

es suggest did you mean资料

term suggester 根据提供的文档提供搜索关键词的建议,也就是关键词自动纠错。该链接介绍如何使用 term suggester 语法。term sug...

602
来自专栏菩提树下的杨过

dubbox 的各种管理和监管

dubbo官方自带了dubbo-admin及dubbo-simple/dubbo-monitor-simple二个子项目用于服务治理及服务监控。  一、dubb...

24910

扫码关注云+社区