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 条评论
登录 后参与评论

相关文章

来自专栏码生

iOS MQTT----MQTTClient实战-看这篇的就够了

MQTT 是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比...

963
来自专栏JadePeng的技术博客

统一配置中心选型对比

引入配置中心,需要考虑和现有项目的兼容性,以及是否引入额外的第三方组件。我们的java项目以SpringBoot为主,需要重点关注springboot支持性。

2632
来自专栏流柯技术学院

18 个命令&工具帮你定位 Linux 性能问题

1.Top Top命令是一个性能监控程序,它按一定的顺序显示所有正在运行而且处于活动状态的实时进程,而且会定期更新显示结果。这条命令显示了CPU的使用率、内存使...

762
来自专栏吴伟祥

聊一聊HTTPS和SSL/TLS 转

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)简单的讲就是HTTP的安全版本。即HTT...

301
来自专栏大魏分享(微信公众号:david-share)

基于开源日志管理系统的设计与构建--构建数据中心一体化运维平台第四篇

1. 前 言 本文在书写过程中,咨询了红帽技术专家郭跃军、李春霖、张亚光,并借鉴了他们提供的技术文档,在此表示感谢! 此外,在书写过程中,笔者也借...

3656
来自专栏应用案例

性能测试之gatling详解

大家接触过形形色色的压力测试工具,例如lr,jmeter各有各的优点,那么最近在做接口测试中涉及到压力测试,小弟就看到一个好用的工具俗称“加特林”英文Gatli...

2746
来自专栏宝塔面板

宝塔网站防火墙使用帮助

一直都有用户建议我们开发木马扫描,木马清理模块,但我们认为与其亡羊补牢,不如直接在源头上阻止站点被挂马的事情发生,《宝塔网站防火墙》是基于nginx/apach...

2090
来自专栏Android开发指南

1.第三方登陆

3219
来自专栏黑白安全

手机验证码常见漏洞 总结 任意用户密码重置

  手机验证码在web应用中得到越来越多的应用,通常在用户登陆,用户注册,密码重置等业务模块用手机验证码进行身份验证。针对手机验证码可能存在的问题,收集了一些手...

1392
来自专栏FreeBuf

在线恶意软件和URL分析集成框架 – MalSub

malsub是一个基于Python 3.6.x的框架,它的设计遵循了当前最流行的互联网软件架构RESTful架构,并通过其RESTful API应用程序编程接口...

18710

扫码关注云+社区