在Firefox、Chrome等浏览器中,使用windows.open()方法打开一个新窗口时,无论第一个参数(strURL)是什么,新开的窗口中的URL都不会立即加载,直到windows.open()函数返回,新开的窗口地址都一直是about:blank,直到当前代码块执行完成时,窗口才会导航到指定的URL上。
而IE浏览器中,新窗口刚刚创建,windows.open()返回windows对象为null,页面开始加载时,源和传入的strURL的源一致。
浏览器解析about:blank时,一定会返回一个0字节的,媒体类型是”text/html”、字符编码是UTF-8的空资源。如果about:blank后面跟有请求字符串,例如about:blank?abc,那么它的处理方式将由浏览器决定,大多数浏览器会提示该地址无法访问。
浏览器会对about伪协议进行一次简单URI标准化操作,例如大小写的标准化、百分号编码转换,即about:bl%61nk与about:blank等价(但是这种用法并不推荐)。还有,虽然浏览器能自动将大写about URI转换为小写,但是如果URI中含有复杂的语法转换,则浏览器将无法正确解析。例如about:bl%40nk,Chrome在一遍简单标准化之后会把它当作about:blank,这个地址是未定义的。
浏览器可以决定about URI的行为,它们可以作为浏览器功能、信息展示或彩蛋等功能存在。例如Firefox、Chrome支持的about:cache,在浏览器访问后会显示当前网络缓存服务器中缓存下的数据。而Firefox支持的about:mozilla,访问后则会显示一个来自虚构小说”Mozilla之书”中的一节。如果跟随的是未定义的内容,浏览器可自行决定是否把它当作about:blank展示。理论上,浏览器应当确保各个功能性about显示的内容不被其他页面获取,因为它们当中很可能包含有隐私信息。
4.3.3 javascript/vbscript伪协议
javascript伪协议非常像data伪协议,都可以把一个编码后的脚本放到地址栏然后执行。javascript伪协议的解析分两步,首先是从地址栏取出并解码javascript伪协议的脚本部分,然后是在某个页面上下文中执行代码。例如下列代码,当用户单击该超链接时,浏览器会跳转到”javascript:foo()”这个URI上,然后解析出脚本部分foo(),并在当前页面的环境下执行foo()函数。
<a href=’javacript:foo()’></a>
另外,和data伪协议不同,javascript伪协议在一些浏览器中有不同的表现。通过windows.open()开启javascript:alert(1)时,各浏览器表现如下:
javascript伪协议时各浏览器的表现
IE 11
新标签页打开,地址栏是javascript:alert(1)
但是新标签页的脚本无法执行,页面转向:
res://ieframe.dll/dnserror.htm#javascript:alert(1)
Chrome 43
Firefox 39
新标签页打开,地址栏是javascript:blank
alert(1)执行成功,执行上下文:about:blank
Safari(所有版本)
Chrome Lite(Android)
无反应
而对超链接中的javascript伪协议,各浏览器的做法也有不同。
<a href=’ javascript:alert(1)’ target=’w’>Click Me</a>
上述代码在各个浏览器运行结果如下:
IE 11单击
新标签页打开,地址栏是javascript:alert(1)
但是新标签页的脚本无法执行,页面转向:
res://ieframe.dll/dnserror.htm#javascript:alert(1)
Chrome 43单击
在当前页中执行了alert(1)
Firefox 左键39
在当前页中执行了alert(1)
Firefox 右键39
新标签页打开,地址栏是about:blank
alert(1)执行成功,执行上下文:about:blank
Safari(所有版本) 点击/单击
在当前页中执行了alert(1)
Chrome Lite(Android)点击
正是各个浏览器的差异导致了开发者的混乱,因此产生了许多漏洞。
5 DNS请求
Chrome、IE等浏览器都会对用户的访问进行预测和预取,例如Chrome在用户地址栏输入的时候就会猜测用户想要访问哪个网站。如果Chrome猜测某个网站将被访问的可能性很高,就会提前预取该网站的数据以达到让用户‘秒开’网页的效果。无论预测是否命中,导航的最开始,浏览器都会通过DNS服务器发送请求并解析到主机对应的IP地址。
这个过程称作‘DNS查找’,它分为下列几步:
6/13 首页 上一页 4 5 6 7 8 9 下一页 尾页