关于在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 相关文章推荐
使用jQuery实现的掷色子游戏动画效果
Mar 14 Javascript
JQuery.get提交页面不跳转的解决方法
Jan 13 Javascript
举例说明JavaScript中的实例对象与原型对象
Mar 11 Javascript
详解Matlab中 sort 函数用法
Mar 20 Javascript
从零学习node.js之简易的网络爬虫(四)
Feb 22 Javascript
jQuery编写textarea输入字数限制代码
Mar 23 jQuery
JS实现微信里判断页面是否被分享成功的方法
Jun 06 Javascript
JQueryMiniUI按照时间进行查询的实现方法
Jun 07 jQuery
关于Vue的路由权限管理的示例代码
Mar 06 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
Aug 18 Javascript
laravel实现中文和英语互相切换的例子
Sep 30 Javascript
JavaScript实现简单日历效果
Sep 11 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
phpwind中的数据库操作类
2007/01/02 PHP
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
jquery JSON的解析方式
2009/07/25 Javascript
基于jQuery的公告无限循环滚动实现代码
2012/05/11 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
2016/06/23 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
原生JavaScript实现的简单放大镜效果示例
2018/02/07 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
Python中非常实用的一些功能和函数分享
2015/02/14 Python
理解Python中的类与实例
2015/04/27 Python
Python检查ping终端的方法
2019/01/26 Python
python按比例随机切分数据的实现
2019/07/11 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
python 画图 图例自由定义方式
2020/04/17 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
Elemental Herbology官网:英国美容品牌
2019/04/27 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
光电信息专业应届生求职信
2013/10/07 职场文书
大学生专科学习生活的自我评价
2013/12/07 职场文书
高一英语教学反思
2014/01/22 职场文书
数学检讨书1000字
2014/02/24 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
主管竞聘书范文
2014/03/31 职场文书
档案信息化建设方案
2014/05/16 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
有关信念的名言语录集锦
2019/12/06 职场文书
JS ES6异步解决方案
2021/04/29 Javascript
pytorch fine-tune 预训练的模型操作
2021/06/03 Python