近期在项目中常常接触ActiveX控件,对于这个名词相信仅仅要是上网看视频的用户一定都会遇到adobe更新或者载入的提示,这就是一个ActiveX控件。一直以为Active控件是处理复杂的页面逻辑提供视频动画展现的和本地环境没有交互的;这两天通过一个简单地<input type="file"/>加深了对他的认识,更加深刻的认识到了他的巨大作用的同一时候无时无刻不感觉到一把达摩克勒斯剑悬在了头上。
起因:
项目中须要在原有的表单中实现一个图片上传功能B。挺简单的逻辑,可是因为原有的页面也有选择文件上传的buttonA,A是调用还有一个第三方控件选择图片。然后在线预览选中的图片可是此控件并不会上传选中的图片,因为不可能让用户选择两次图片,因此须要增加功能B在用户调用A功能的时候就把图片上传上去,第一个想法尝试使用jquery将<input type="file" id="imgPath"> 中的value进行动态赋值。用户调用A的时候就将图片上传,多次尝试后发现这样的方法是无法给input 域赋值的。原因是这个类型是仅仅读的,不能赋值,即使给他value设置值也是无效的。
原因能够试想一下,假设这个域能够赋值。那么我能够任意赋值一个路径。将用户的数据在未经用户允许的情况下直接上传,多么可怕。难道就没有一个赋值一个路径在未经用户许可的情况下就上传到的方法么?答案是有的,能够通过ActiveX插件,此处以某公司的XX签章产品中的一个功能为例:
var path="D://那个谁.jpg";
obj.putFiles(path,"艳照");
简简单单两句话就能悄悄的将电脑的文件上传到server了。试想假设有人刻意将你引诱到某个网页,提示你要载入一个控件,然后让你看半小时的电影,他就能够在后台循环遍历你的电脑 C、D、E各种盘找到敏感的文件进行上传,是不是非常恐怖。
为了防止这样的情况的发生。浏览器本身有非常多限制AxtiveX控件执行的方法,最简单的就是在Internet选项中设置是否启用等信息。更为安全的方法是将须要使用控件的可信站点增加可信站点里面,对于不明白来源的控件不要安装。