关于在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 相关文章推荐
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
Apr 20 Javascript
javascript 日期时间函数(经典+完善+实用)
May 27 Javascript
用方法封装javascript的new操作符(一)
Dec 25 Javascript
js实现颜色阶梯渐变效果(Gradient算法)
Mar 21 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
May 11 Javascript
基于JavaScript实现评论框展开和隐藏功能
Aug 25 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
Apr 17 Javascript
创建echart多个联动的示例代码
Nov 23 Javascript
从组件封装看Vue的作用域插槽的实现
Feb 12 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
Jul 31 jQuery
JavaScript实现简单的弹窗效果
May 19 Javascript
html5 录制mp3音频支持采样率和比特率设置
Jul 15 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/05/05 PHP
php中通过Ajax如何实现异步文件上传的代码实例
2011/05/07 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
jQuery实现动画效果的实例代码
2013/05/07 Javascript
根据选择不同的下拉值出现相对应的文本输入框
2013/08/01 Javascript
JavaScript制作颜色反转小游戏
2016/09/25 Javascript
BootStrap Fileinput初始化时的一些参数
2016/12/30 Javascript
常用的js方法合集
2017/03/10 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
ztree加载完成后显示勾选节点的实现代码
2018/10/22 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
python分析apache访问日志脚本分享
2015/02/26 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
pytorch自定义二值化网络层方式
2020/01/07 Python
Python实现名片管理系统
2020/02/14 Python
Python3 requests模块如何模仿浏览器及代理
2020/06/15 Python
通过Python pyecharts输出保存图片代码实例
2020/11/25 Python
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
威盛公司软件C++工程师笔试题面试题
2012/07/16 面试题
某公司.Net方向面试题
2014/04/24 面试题
三好学生自我鉴定
2013/12/17 职场文书
周年庆典邀请函范文
2014/01/23 职场文书
中年人生感言
2014/02/04 职场文书
小学生综合素质评语
2014/04/23 职场文书
2015年司法所工作总结
2015/04/27 职场文书
校园之声广播稿
2015/08/18 职场文书
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js
css3手动实现pc端横向滚动
2022/06/21 HTML / CSS