关于在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 相关文章推荐
JavaScript实现广告的关闭与显示效果实例
Jul 02 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
Sep 20 Javascript
前端设计师们最常用的JS代码汇总
Sep 25 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
Sep 21 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
Apr 17 Javascript
angularJs使用ng-repeat遍历后选中某一个的方法
Sep 30 Javascript
jQuery AJAX与jQuery事件的分析讲解
Feb 18 jQuery
vue的keep-alive用法技巧
Aug 15 Javascript
深入了解JavaScript词法作用域
Jul 29 Javascript
vue element-ui中table合计指定列求和实例
Nov 02 Javascript
JavaScript中条件语句的优化技巧总结
Dec 04 Javascript
jquery插件实现搜索历史
Apr 24 jQuery
从数据结构分析看:用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中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
2014/07/25 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
php实现微信扫码支付
2017/03/26 PHP
JavaScript OOP面向对象介绍
2010/12/02 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
jsPDF导出pdf示例
2014/05/02 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
js实现动态显示时间效果
2017/03/06 Javascript
jQuery实现字符串全部替换的方法【推荐】
2017/03/09 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
24行JavaScript代码实现Redux的方法实例
2019/11/17 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
vue将data恢复到初始状态 && 重新渲染组件实例
2020/09/04 Javascript
js实现简易拖拽的示例
2020/10/26 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
Python中绑定与未绑定的类方法用法分析
2016/04/29 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
2018/08/03 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
python aiohttp的使用详解
2019/06/20 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
基于python实现微信好友数据分析(简单)
2020/02/16 Python
python实现的分层随机抽样案例
2020/02/25 Python
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
社区活动总结范文
2015/05/07 职场文书
法律讲堂观后感
2015/06/11 职场文书
离职信范文
2015/06/23 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
2016年少先队活动总结
2016/04/06 职场文书
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL