关于在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 相关文章推荐
根据分辨率不同,调用不同的css文件
Aug 25 Javascript
jQuery 追加元素的方法如append、prepend、before
Jan 16 Javascript
js实现window.open不被拦截的解决方法汇总
Oct 30 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
Jul 28 Javascript
深入理解jquery中的事件与动画
May 24 Javascript
一个简单的JavaScript Map实例(分享)
Aug 03 Javascript
JS产生随机数的用法小结
Dec 10 Javascript
最基础的vue.js双向绑定操作
Aug 23 Javascript
vue中接口域名配置为全局变量的实现方法
Sep 20 Javascript
JavaScript学习笔记之图片库案例分析
Jan 08 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
Apr 08 Javascript
layer.open组件获取弹出层页面变量、函数的实例
Sep 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
第十一节--重载
2006/11/16 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
PHP+FastCGI+Nginx配置PHP运行环境
2014/08/07 PHP
WordPress中"无法将上传的文件移动至"错误的解决方法
2015/07/01 PHP
PHP实现重载的常用方法实例详解
2017/10/18 PHP
javascript 最常用的10个自定义函数[推荐]
2009/12/26 Javascript
Javascript 类型转换方法
2010/10/24 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
使用JS 清空File控件的路径值
2013/07/08 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
2014/04/03 Javascript
JavaScript中具名函数的多种调用方式总结
2014/11/08 Javascript
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
jQuery定义背景动态切换效果的方法
2015/03/23 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
2016/12/15 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
浅谈React中组件间抽象
2018/01/27 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
使用apifm-wxapi快速开发小程序过程详解
2019/08/05 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
浅谈javascript如何获取文件后缀名
2020/08/07 Javascript
python设置windows桌面壁纸的实现代码
2013/01/28 Python
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
浅析Python中的for 循环
2016/06/09 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
C语言50道问题
2014/10/23 面试题
团委竞选演讲稿
2014/04/24 职场文书
法院答辩状格式
2015/05/22 职场文书
雷锋电影观后感
2015/06/10 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书
MySQL sql_mode修改不生效的原因及解决
2021/05/07 MySQL
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技