关于在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 相关文章推荐
Opacity.js
Jan 22 Javascript
又一个图片自动缩小的JS代码
Mar 10 Javascript
js 弹出菜单/窗口效果
Oct 30 Javascript
jQuery中hide()方法用法实例
Dec 24 Javascript
js实现字符串转日期格式的方法
May 20 Javascript
浅谈jquery页面初始化的4种方式
Nov 27 Javascript
JS实现页面跳转参数不丢失的方法
Nov 28 Javascript
JS中如何实现点击a标签返回页面顶部的问题
Jan 19 Javascript
微信小程序实战之上拉(分页加载)效果(2)
Apr 17 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
Mar 24 Javascript
[jQuery] 事件和动画详解
Mar 05 jQuery
通过实例解析chrome如何在mac环境中安装vue-devtools插件
Jul 10 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
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
PHP mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
ThinkPHP 表单自动验证运用示例
2014/10/13 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
2014/11/14 PHP
phpStorm2020 注册码
2020/09/17 PHP
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
[45:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第二场 6.2
2018/06/04 DOTA
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
Python中类型关系和继承关系实例详解
2015/05/25 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
如何使用repr调试python程序
2020/02/28 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
python使用hdfs3模块对hdfs进行操作详解
2020/06/06 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
2014/03/30 面试题
大学生水果店创业计划书
2014/01/28 职场文书
给老师的一封建议书
2014/03/13 职场文书
商场主管竞聘书
2014/03/31 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
四风对照检查材料思想汇报
2014/09/20 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
导游词之山东红叶谷
2019/10/31 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫