关于在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中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
Jun 28 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
Dec 15 Javascript
jquery实现文字由下到上循环滚动的实例代码
Aug 09 Javascript
实用的Jquery选项卡TAB示例代码
Aug 28 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
Dec 31 Javascript
jquery验证手机号是否正确实例讲解
Nov 17 Javascript
javascript实现方法调用与方法触发小结
Mar 26 Javascript
web打印小结
Jan 11 Javascript
Vue实现路由跳转和嵌套
Jun 20 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
Dec 20 Javascript
Vue引入jquery实现平滑滚动到指定位置
May 09 jQuery
微信小程序使用canvas的画图操作示例
Jan 18 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中get_defined_constants函数用法实例分析
2015/05/12 PHP
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
javascript 小数取整简单实现方式
2014/05/30 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
ES6深入理解之“let”能替代”var“吗?
2017/06/28 Javascript
Angular6中使用Swiper的方法示例
2018/07/09 Javascript
浅析JS中什么是自定义react数据验证组件
2018/10/19 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
javascript设计模式之装饰者模式
2020/01/30 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
Python os模块常用方法和属性总结
2020/02/20 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
浅谈html5 响应式布局
2014/12/24 HTML / CSS
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
实习护理工作自我评价
2013/09/25 职场文书
行政助理岗位职责
2013/11/10 职场文书
大学四年学习的自我评价分享
2013/12/09 职场文书
大学生评语大全
2014/04/18 职场文书
物业接待员岗位职责
2015/04/15 职场文书
2016年4月份红领巾广播稿
2015/12/21 职场文书