关于在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实现点击栏目背景色改变
Dec 10 Javascript
window.addEventListener来解决让一个js事件执行多个函数
Dec 26 Javascript
验证码按回车不变解决方法
Mar 29 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
Aug 12 Javascript
浅谈javascript语法和定时函数
May 03 Javascript
常用原生JS兼容性写法汇总
Apr 27 Javascript
JavaScript中最常见的三个面试题解析
Mar 04 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
Jun 14 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
Jan 18 jQuery
react koa rematch 如何打造一套服务端渲染架子
Jun 26 Javascript
vue子传父关于.sync与$emit的实现
Nov 05 Javascript
微信小程序服务器日期格式化问题
Jan 07 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实现链结人气统计
2006/10/09 PHP
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
通过具体程序来理解PHP里面的抽象类
2010/01/28 PHP
php中定义网站根目录的常用方法
2010/08/08 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
php编写的抽奖程序中奖概率算法
2015/05/14 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
JavaScript中的isXX系列是否继续使用的分析
2011/04/16 Javascript
JS继承 笔记
2011/07/13 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
javascipt:filter过滤介绍及使用
2014/09/10 Javascript
jQuery实现自动调整字体大小的方法
2015/06/15 Javascript
跟我学习javascript的var预解析与函数声明提升
2015/11/16 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
基于vue实现一个神奇的动态按钮效果
2019/05/15 Javascript
微信小程序实现搜索历史功能
2020/03/26 Javascript
微信小程序实现拖拽功能
2019/09/26 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
在Python中使用mechanize模块模拟浏览器功能
2015/05/05 Python
浅析Python 中整型对象存储的位置
2016/05/16 Python
Python selenium 三种等待方式解读
2016/09/15 Python
python八大排序算法速度实例对比
2017/12/06 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
彪马法国官网:PUMA法国
2019/12/15 全球购物
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
军训自我鉴定怎么写
2014/02/13 职场文书
献爱心倡议书
2014/04/14 职场文书
厂区绿化方案
2014/05/08 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
先进典型事迹材料
2014/12/29 职场文书
学校重阳节活动总结
2015/03/24 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
HTML中的表单元素介绍
2022/02/28 HTML / CSS