关于在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 相关文章推荐
JS 去除Array中的null值示例代码
Nov 20 Javascript
jquery下div 的resize事件示例代码
Mar 09 Javascript
常用jQuery选择器总结
Jul 11 Javascript
JavaScript中实现依赖注入的思路分享
Jan 15 Javascript
jQuery原理系列-常用Dom操作详解
Jun 07 Javascript
详解vue的数据binding绑定原理
Apr 12 Javascript
Vue.js在使用中的一些注意知识点
Apr 29 Javascript
jquery在vue脚手架中的使用方式示例
Aug 29 jQuery
微信小程序实现图片懒加载的示例代码
Dec 13 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
Nov 30 Javascript
JavaScript生成一个不重复的ID的方法示例
Sep 16 Javascript
如何使用JavaScript策略模式校验表单
Apr 29 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/01/26 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
php防止用户重复提交表单
2015/11/02 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
2018/06/05 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
网页设计常用的一些技巧
2006/12/22 Javascript
jQuery ui 1.7更新小结
2009/08/15 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
ExtJs使用总结(非常详细)
2012/03/22 Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
2014/01/08 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
2014/05/01 Javascript
使用javascript实现Iframe自适应高度
2014/12/24 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
Node.js数据库操作之查询MySQL数据库(二)
2017/03/04 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
[02:09]2018DOTA2亚洲邀请赛TNC赛前采访
2018/04/04 DOTA
[59:30]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
详解django中Template语言
2020/02/22 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
基于Python实现天天酷跑功能
2021/01/06 Python
HTML5 Canvas中使用用路径描画圆弧
2015/01/01 HTML / CSS
介绍一下.net和Java的特点和区别
2012/09/26 面试题
银行会计职员个人的自我评价
2013/09/29 职场文书
生物科学专业个人求职信范文
2013/12/07 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
项目经理聘任书
2014/03/29 职场文书
美食节策划方案
2014/05/26 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python
Python常遇到的错误和异常
2021/11/02 Python