Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

Blob-DataURL的安全性问题

  在现代浏览器中可以使用Blob创建一个HTML数据对象,然后使用URL对象的createDataURL方法来创建一个可以访问Blob数据对象的URL。但Blob对象的数据类型可以是HTML,这就可能存在安全性问题。那么在Blob-DataURL的HTML页面中可以访问关键位置吗?
  答案是,存在浏览器差异!下面是测试代码和截图。由于有安全性问题我就不做成在线运行了,请保存到本地测试。
<script>
//在cookie和localStorage中分别写入一个数据
var now=new Date*1;
document.cookie="test="+now
localStorage["test"]=now;
</script>
<script id="data">
//输出cookie和localStorage的数据
document.write("JSON数据:");
document.write(JSON.stringify(localStorage));
document.write("<br/>");
document.write("cookie数据:");
document.write(document.cookie);
</script>
<script>
//获取id为data的SCRIPT标签的整个HTML部分做成blob对象
var blob=new Blob([data.outerHTML],{type:"text/html; charset=utf-8"});
//从blob对象创建数据URL
var url=URL.createObjectURL(blob);
//输出一个iframe并打开上面生成的URL
document.write('<iframe height="70" src="'+url+'"></iframe>');
</script>

  火狐中没做任何安全性限制,cookie和localStorage都是完全可以访问的,Chrome晦涩的限制了cookie的访问,但是对localStorage撒手不管。而IE是非常严格的,不仅是不运行访问,甚至这个HTML根本没有被打开。如果HTML有被打开即使没有数据也可以看到文字,但是IE中什么也看不到。这里测试使用了iframe,如果改成window.open那个URL,在IE中会直接抛出错误。
  
  虽然IE这样禁止访问有点恶心人,但是前面两家的安全性限制也有点问题。总之三家的方案都不合我口味!我觉得这个行为应该是允许访问页面,但禁止所有和本域有关的操作,比如:cookie、localStorage、sessionStorage、indexedDB、WebSQL,等。

  本次测试的浏览器版本号
    IE:10.0.9200.16660
    Chrome:29.0.1547.62 m
    Firefox:23.0.1
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^