关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置


Posted in Javascript onApril 17, 2013

IE下的DHTML有各种MS$的私有特征,已经是众所周知。其中有个比较有趣就是:event.screenX和event.screenY,可以获得系统级别的鼠标位置坐标。

咋一听,其实也觉得没什么。屏幕上的坐标无非就是:浏览器客户区域里的坐标 + 浏览器窗口坐标 + 客户区偏移,仅此而已。

IE本身就可以通过event和screen对象得到各种屏幕和窗体位置有关的信息。

然而,真正诡异的事还没开始!按照标准的DOM模型定义,只有在触发某个事件的时候,才能从event中获得与该事件相关的参数。

也就是说,只有触发mousemove,等这类mouseXXX鼠标事件时,才有权获取和鼠标有关的参数。然而,在万恶的IE下,任何事件触发后,都能获取event.screenX和event.screenY,甚至在页面最小化时!

当然,你可能会说这还是需要依赖一个事件。然而,这里的事件可以是任意的onxxx这类回调函数,并非局限于UI事件。于是,我们可以人为的制造它!

最简单的例子,给一个new Image设置一个无效的src,它的onerror事件立马就触发了!

于是我们可以在onerror里获取event.screenX,然后继续设置无效的src,于是就可以实时跟踪用户屏幕级别的鼠标指针了。因为onerror的产生不限于任何UI消息,因此页面最小化或非活动状态下,事件仍然能够触发!

至于能不能获取鼠标或键盘哪个键被按下,很不幸,真的不可以。如果捕捉全局按键,哪岂不是可以监听密码输入了。。。

事实上,onerror这类非UI事件的触发,根本就没有任何鼠标或键盘参数传入浏览器窗体,所以也就无法获取各种鼠标键盘信息。至于event.screenX,唯一的解释估计它是event的一个Getter,内部直接调用了GetCursorPos这个Win API,并非事件的触发者提供了这属性。

如果某个页面植入了这样的跟踪代码,然后将坐标位置通过socket.io实时传送回来,岂不是很有趣。。。

Javascript 相关文章推荐
Add a Table to a Word Document
Jun 15 Javascript
JavaScript单元测试ABC
Apr 12 Javascript
Javascript中找到子元素在父元素内相对位置的代码
Jul 21 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
Mar 22 Javascript
javascript计时器事件使用详解
Jan 07 Javascript
JSONObject使用方法详解
Dec 17 Javascript
JavaScript修改作用域外变量的方法
Mar 25 Javascript
超链接怎么正确调用javascript函数
May 23 Javascript
JQuery在循环中绑定事件的问题详解
Jun 02 Javascript
微信小程序支付功能 php后台对接完整代码分享
Jun 12 Javascript
如何通过JS实现日历简单算法
Oct 14 Javascript
JS实现简易日历效果
Jan 25 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
Apr 17 #Javascript
关于eval 与new Function 到底该选哪个?
Apr 17 #Javascript
js实现在页面上弹出蒙板技巧简单实用
Apr 16 #Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
Apr 16 #Javascript
拖动table标题实现改变td的大小(css+js代码)
Apr 16 #Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
Apr 16 #Javascript
jquery表格内容筛选实现思路及代码
Apr 16 #Javascript
You might like
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
javascript实现的listview效果
2007/04/28 Javascript
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
js表单提交和submit提交的区别实例分析
2015/12/10 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
jQuery 实现倒计时天,时,分,秒功能
2018/07/31 jQuery
使用node.JS中的url模块解析URL信息
2020/02/06 Javascript
js如何验证密码强度
2020/03/18 Javascript
[01:33:25]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第一场 1月24日
2021/03/11 DOTA
python时间整形转标准格式的示例分享
2014/02/14 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
深入浅析Python传值与传址
2018/07/10 Python
python验证身份证信息实例代码
2019/05/06 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
CK美国官网:Calvin Klein
2016/08/26 全球购物
美的官方商城:Midea
2016/09/14 全球购物
结构工程研究生求职信
2013/10/13 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书
导游词开场白
2015/01/31 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers
vue css 相对路径导入问题级踩坑记录
2022/06/05 Vue.js