Skip to content

Commit 0d10e3b

Browse files
committed
docs(bom): edit 同源政策
1 parent 48619c0 commit 0d10e3b

2 files changed

Lines changed: 6 additions & 4 deletions

File tree

docs/bom/cookie.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ document.cookie // "id=foo;key=bar"
3636

3737
不同浏览器对 Cookie 数量和大小的限制,是不一样的。一般来说,单个域名设置的 Cookie 不应超过30个,每个 Cookie 的大小不能超过4KB。超过限制以后,Cookie 将被忽略,不会被设置。
3838

39-
浏览器的同源政策规定,两个网址只要域名相同和端口相同,就可以共享 Cookie(参见《同源政策》一章)。注意,这里不要求协议相同。也就是说,`http://example.com`设置的 Cookie,可以被`https://example.com`读取。
39+
浏览器的同源政策规定,两个网址只要域名相同,就可以共享 Cookie(参见《同源政策》一章)。注意,这里不要求协议相同。也就是说,`http://example.com`设置的 Cookie,可以被`https://example.com`读取。
4040

4141
## Cookie 与 HTTP 协议
4242

docs/bom/same-origin.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
> - 协议相同
1414
> - 域名相同
15-
> - 端口相同
15+
> - 端口相同(这点可以忽略,详见下文)
1616
1717
举例来说,`http://www.example.com/dir/page.html`这个网址,协议是`http://`,域名是`www.example.com`,端口是`80`(默认端口可以省略),它的同源情况如下。
1818

@@ -22,11 +22,13 @@
2222
- `http://www.example.com:81/dir/other.html`:不同源(端口不同)
2323
- `https://www.example.com/dir/page.html`:不同源(协议不同)
2424

25+
注意,标准规定端口不同的网址不是同源(比如8000端口和8001端口不是同源),但是浏览器没有遵守这条规定。实际上,同一个网域的不同端口,是可以互相读取 Cookie 的。
26+
2527
### 目的
2628

2729
同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。
2830

29-
设想这样一种情况:A 网站是一家银行,用户登录以后,A 网站在用户的机器上设置了一个 Cookie,包含了一些隐私信息(比如存款总额)。用户离开 A 网站以后,又去访问 B 网站,如果没有同源限制,B 网站可以读取 A 网站的 Cookie,那么隐私信息就会泄漏。更可怕的是,Cookie 往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。因为浏览器同时还规定,提交表单不受同源政策的限制。
31+
设想这样一种情况:A 网站是一家银行,用户登录以后,A 网站在用户的机器上设置了一个 Cookie,包含了一些隐私信息。用户离开 A 网站以后,又去访问 B 网站,如果没有同源限制,B 网站可以读取 A 网站的 Cookie,那么隐私就泄漏了。更可怕的是,Cookie 往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。因为浏览器同时还规定,提交表单不受同源政策的限制。
3032

3133
由此可见,同源政策是必需的,否则 Cookie 可以共享,互联网就毫无安全可言了。
3234

@@ -56,7 +58,7 @@
5658
- window.focus()
5759
- window.postMessage()
5860

59-
上面的九个属性之中,只有`window.location`是可读写的,其他八个全部都是只读。而且,即使是`location`对象,非同源的情况下,也只允许调用`location.replace`方法和写入`location.href`属性。
61+
上面的九个属性之中,只有`window.location`是可读写的,其他八个全部都是只读。而且,即使是`location`对象,非同源的情况下,也只允许调用`location.replace()`方法和写入`location.href`属性。
6062

6163
虽然这些限制是必要的,但是有时很不方便,合理的用途也受到影响。下面介绍如何规避上面的限制。
6264

0 commit comments

Comments
 (0)