做web开发的同学应该都知道浏览器的同源策略,它是一种约定,是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
对于不懂的人来说,上面的就是一堆废话,所以还是直接形容下吧。
用户使用浏览器登陆12306网站,之后在浏览器点击购票、查票,会发现一直是登陆状态,因为浏览器可以获取到用户的登陆状态和用户信息,以确保用户的各种操作不被中断。浏览器可以得到用户在12306网站上面的各种数据,那么这个时候,用户如果又访问了另外一个B网站,这个时候处于安全考虑,浏览器是禁止B网站获取12306网站的数据的。
浏览器同源策略就是,A网站只能访问A网站数据,B网站只能访问B网站数据,AB不能互相访问数据。
浏览器同源策略确实很安全,但是可苦了程序员!
有些公司不止一个网站,而这些网站使用同一个用户系统,比如阿里巴巴,产品经理提需求了,用户只要在淘宝登陆了,那么他再访问天猫、阿里巴巴、邮箱时就不应该再让用户登陆了。
程序员此时一点也不开心,心里想,“文盲,都不知道浏览器同源策略,这怎么可能实现?!”
然后,程序员继续回去加班了,第二天早晨(注:程序员定理,当程序员晚上加班,第二天早晨在公司,那么只有一种情况就是他一宿没回家,不存在回家早晨再来的可能),他非常高兴地找到产品,说已经解决了,可以上线了!
产品经理听完,也开心地笑了。
以上纯属虚构。
上面故事中标红的“已经解决了”,这个程序员用什么解决的呢?没错,就是JSONP(JSON with Padding)!
JSONP是JSON的一种“使用模式”,解决浏览器的跨域数据访问的问题。
JSONP的具体原理就不在这里废话了,大家可以参考维基百科:
https://zh.wikipedia.org/wiki/JSONP
开始说正事,因为很多公司为了在不同网站之间共享数据,所以它会提供JSONP协议,让自己公司的其它网站调用。
我以人人网为例子,我登录了同济大学某个妹子的人人网账号。
由于人人网提供了几个JSONP协议的接口,通过这个接口允许人人网自己的其它网站获取当前登陆用户数据,如下图便是其中一个接口,该接口提供了当前用户的ID、姓名、还有头像。
这个时候,如果我登录人人网自己的其它网站,都可以调用这个JSONP协议的接口,来获取妹子数据。
我这里一直强调“自己公司的其它网站”、“人人网自己的其它网站”,为什么呢,因为JSONP本身不知道哪个网站是你公司自己的,一旦支持这个协议,那么任何网站都可以调用这个接口了。
所以:
有安全防范意识的公司,会对JSONP接口做限制,明确哪些网站可以访问,即所谓的白名单,避免其它网站访问而导致数据泄露。
可是呢(重要事情说三遍):
人人网没做限制!
人人网没做限制!
人人网没做限制!
既然人人网没做限制,那么就可以在任意网站加入如下网页代码,即可获取人人网当前用户信息了。
function renren(obj){
document.write(obj.user.userId+"<br />"+obj.user.userName+"<br />"+"<img src=""+obj.user.largeUrl+""></img>");
}
</script>
<script src="http://base.yx.renren.com/RestAPI?method=api.base.getLoginUser&format=2&callback=renren"></script>
如图,在我自己的网站下面,输出了人人网的用户数据。
只是输出肯定不过瘾啦,可以通过浏览器把用户数据发送到黑客的服务器上面来,进而可以数据分析。
通过这个攻击可以干嘛呢?哈哈,太多了,且听我道来,黑客是最富创造力的职业!
假如,有一个卖东西的网站,每天都有未登陆的用户访问,其中一些人在这个网站上面查看了很多商品,但是并没有买。那么这些人很有可能有欲望去买这些东西,由于某些原因当时没有买。对于卖家来说,这些潜在用户的价值绝对大大滴!偶尔给他们推送个消息或者咨询,让他们了解网站的最新商品、最新动态,很有可能会将这些用户转换为付费用户!
那么,怎么获得这些用户的信息呢?
呵呵!对于黑心的、不择手段的卖家,他可以通过JSONP获得用户的数据,进而“联系”这些用户,引导他们去买东西。
唉,这个世界原来可以这么黑暗。
对于yellow网站呢?
1. 用户通过浏览器访问人人网站等社交类网站,并登陆,浏览器记录登陆用户状态。
2. 用户无聊,访问了一个yellow网站。
3. yellow网站很猥琐,通过JSONP协议让浏览器从社交网站获取数据,并返回给yellow网站。
4. yellow网站拿到用户社交数据后,通知到yellow网站负责人。
5. yellow网站负责人通过“某种途径”,找到这个用户,对用户说了句“Hi~想要大宝剑不?”。
6. 自行yy结尾。。。
举个例子,黑客的邮件,中间是各种yellow网址,右面是访问这些网址的人:
写在最后,大学时候有同学说他的qq账号被黑了,空间里有各种“大宝剑”留言,一副无辜的样子。其实,这种人最可耻,肯定没事就访问yellow网站,不然人家花那么大经历在你下面留言?
唉,这个世界原来可以这么黑暗。
注:所有内容纯属虚构,所有图片都是ps合成,请忽略本文的真实性,世界还是很美好的。
5 Pingbacks