0414-Browser Security-基本概念

# Browser Security-基本概念

URL格式:

“`
scheme://[login[:password]@](host_name|host_address)[:port][/hierarchical/path/to/resource[?search_string][#fragment_id]]

“`

下面详细解释一下各个部分:

#### scheme

`scheme`是协议名不区分大小写,以冒号结尾,表示需要使用的协议来检索资源。

`URL`协议是由IANA(The Internet Assigned Numbers Authority,互联网数字分配机构)与个标准化组织一同管理的。

下面的网址列举出目前有的`scheme`:

[http://www.iana.org/assignments/uri-schemes.html](http://www.iana.org/assignments/uri-schemes.html)

有一些大家很熟悉的例如:`http:、https:、ftp:`等。

在现实中,一些非正式的协议也会被支持,如`javascript`等,这可能会有一些安全隐患,将在后面进行讨论。

在RFC1738中定义`scheme`中只能包含`字母、数字、+、-`,现实中浏览器没有严格的遵守。

IE中会忽略所有的非打印字符ASCII中的0x01到0x1F。

chrome中会跳过0x00即NULL字符。

为了符合RFC1738中的语法规范,每个URL中需要在认证信息前面加入“//”。

在省略“//”字符串的情况下,会造成解析错误。

但在个别情况下不会解析错误,如mailto:user@example.com?subject= Hello+world,由邮件客户端打开的时候不会出错。

但是由于浏览器的特性:

“`
1 http:baidu.com/ 这个地址在最新版Chrome、Safari、Firefox、IE中都可以定向到http://baidu.com/ 。
2 javascript://example.com/%0Aalert(1)