关于在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 index()方法 获取相应元素索引值
Oct 12 Javascript
鼠标移动到图片名上,显示图片的简单实例
Jul 14 Javascript
js动态移动滚动条至底部示例代码
Apr 24 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
May 08 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
Dec 25 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
Mar 13 Javascript
vue项目中导入swiper插件的方法
Jan 30 Javascript
Vue2 模板template的四种写法总结
Feb 23 Javascript
vue 巧用过渡效果(小结)
Sep 22 Javascript
使用JS获取页面上的所有标签
Oct 18 Javascript
JS原生瀑布流效果实现
Apr 26 Javascript
在vant 中使用cell组件 定义图标该图片和位置操作
Nov 02 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
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
html文本框提示效果的示例代码
2014/06/28 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
js完整倒计时代码分享
2016/09/18 Javascript
JS实现动态修改table及合并单元格的方法示例
2017/02/20 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
vue实现条件判断动态绑定样式的方法
2018/09/29 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
JS实现导航栏楼层特效
2020/01/01 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
python操作redis数据库的三种方法
2020/09/10 Python
通过实例解析Python文件操作实现步骤
2020/09/21 Python
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
New Balance美国官网:运动鞋和健身服装
2017/04/11 全球购物
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
交通事故检查书范文
2014/01/30 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
读书活动总结范文
2014/04/26 职场文书
产品设计开发计划书
2014/05/07 职场文书
初中教师个人工作总结
2015/02/10 职场文书
大学生村官入党自传
2015/06/26 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
javascript Number 与 Math对象的介绍
2021/11/17 Javascript