关于在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 相关文章推荐
tagName的使用,留一笔
Jun 26 Javascript
Z-Blog中用到的js代码
Mar 15 Javascript
javascript实现yield的方法
Nov 06 Javascript
js使用post 方式打开新窗口
Feb 26 Javascript
jQuery实现简单的间隔向上滚动效果
Mar 09 Javascript
AngularJS中的JSONP实例解析
Dec 01 Javascript
使用ajax的post同步执行(实现方法)
Dec 21 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
Oct 09 Javascript
vue 项目接口管理的实现
Jan 17 Javascript
关于vue状态过渡transition不起作用的原因解决
Apr 09 Javascript
前端深入理解Typescript泛型概念
Mar 09 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
Sep 02 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防盗链的常用方法小结
2010/07/02 PHP
关于crontab的使用详解
2013/06/24 PHP
简单的自定义php模板引擎
2016/08/26 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
2018/09/05 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
JavaScript this关键字的深入详解
2021/01/14 Javascript
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
Python3.X 线程中信号量的使用方法示例
2017/07/24 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
python中的字典操作及字典函数
2018/01/03 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
python实现维吉尼亚算法
2019/03/20 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
django跳转页面传参的实现
2020/09/17 Python
2014年国庆节演讲稿
2014/09/02 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
营业员岗位职责范本
2015/04/14 职场文书
小学生家长意见
2015/06/03 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书