关于在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 相关文章推荐
DOMAssitant最新版 DOMAssistant 2.5发布
Dec 25 Javascript
jquery autocomplete自动完成插件的的使用方法
Aug 07 Javascript
JS批量修改PS中图层名称的方法
Jan 26 Javascript
js校验表单后提交表单的三种方法总结
Feb 28 Javascript
JS实现距离上次刷新已过多少秒示例
May 23 Javascript
javascript的BOM
May 03 Javascript
Vue.js组件tree实现省市多级联动
Dec 02 Javascript
jquery横向纵向鼠标滚轮全屏切换
Feb 27 Javascript
在React 组件中使用Echarts的示例代码
Nov 08 Javascript
React Native基础入门之初步使用Flexbox布局
Jul 02 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
May 08 Javascript
JavaScript如何借用构造函数继承
Nov 06 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 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
php启动时候提示PHP startup的解决方法
2013/05/07 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
PHP实现微信小程序人脸识别刷脸登录功能
2018/05/24 PHP
js数组方法扩展实现数组统计函数
2014/04/09 Javascript
JavaScript获取Url里的参数
2014/12/18 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
2016/08/24 Javascript
Bootstrap输入框组件简单实现代码
2017/03/06 Javascript
JS实现加载时锁定HTML页面元素的方法
2017/06/24 Javascript
Vue官网todoMVC示例代码
2018/01/29 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
python实现按行切分文本文件的方法
2016/04/18 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
Python基础知识点 初识Python.md
2019/05/14 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
雅虎笔试题(字符串操作)
2015/03/24 面试题
模范家庭事迹材料
2014/02/10 职场文书
《苏珊的帽子》教学反思
2014/04/07 职场文书
师德师风建设方案
2014/05/08 职场文书
学校校庆演讲稿
2014/05/22 职场文书
安全生产标语
2014/06/06 职场文书
联谊会开场白
2015/06/01 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书
golang json数组拼接的实例
2021/04/28 Golang
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS