图片中显示了自己的QQ信息实现原理
前言
我想每个人只要是你玩过QQ空间等其他的应用什么的都会有这样的经历,在朋友写的日志中出现自己的扣扣号码或者是网名。
这是一种利用腾讯QQ空间的漏洞,也就是说按照正常的情况来说,空间中不应该出现这种情况,我们很容易怀疑这是用户隐私的侵犯,但是值得一提的是,这些东西都是由三方接口获取的,也就是说用户的资料早被泄漏了。
真实案例
分析原理
作为web开发者来说,很容易就能知道如何获取QQ号码如何获取QQ号码对应的用户信息。
我们知道网页是基于HTTP协议传输的,
首先、我们来了解一下HTTP协议(超文本传输协议):
HTTP协议包含三部分:请求行、请求头、消息体。
在请求头中包含了很多信息,例如:浏览器信息、Host、缓存时间、支持语言等等。
Accept:image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Cookie: 这里是敏感信息清除了
Host:c.isdspeed.qq.com
Referer:http://user.qzone.qq.com/903595554/infocenter?ptsig=gwxEOGALd*pGIPGyh*hqrOWaQ743st1DDwZEQwI8cXo_
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36
Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。
http://user.qzone.qq.com/903598554/infocenter
通过第三方接口获取QQ号码信息
我们在前面的URL地址中得到QQ号码,但是并没有用户的详细信息。
这里是网上任意找到的三方接口,返回的JSONP(JavaScript代码)
http://redstones.sinaapp.com/apis/qqinfo-service.php?qq=9035985554
_Callback( {"uin":446050962, "rflag":-1, "pycertified":0, "qzone":0, "intimacyScore":0, "nickname":"无所谓", "realname":"", "smartname":"", "logolabel":"1389902986", "friendship":0, "offsetBirth":223, "isFriend":0, "bitmap":"1850b5a40000c009", "avatarUrl":"http://qlogo3.store.qq.com/qzone/446050962/446050962/100?1389902986", "specialrelation":0});
通过服务端处理请求信息,我们可以轻松绘制信息到图片上,然后返回该图片流。
总结
比较常见的跨站脚本攻击(XSS),这个就好比是一个反向攻击,攻击对象不腾讯的QQ空间,而是QQ空间去攻击自己的服务器,然后自己服务器得到QQ资料。