libook
2021-09-30 12:39:40 +08:00
同源策略是用来保护客户端的。
先了解三个基本原理:
1. 浏览器会根据请求的域来记录 Cookies,当发出请求的时候,同样会携带与请求的域对应的 Cookies ;
2. 用户登录会话信息通常记录在 Cookies 中;
3. 每个网页都有一个主要的 Document 对象,而浏览器会将当前页面的域记录在 Document 对象的一个描述当前域的属性中。
假设没有同源策略:
1. 用户在网银网站登录,登录会话存储在网银网站域对应的 Cookie 里;
2. 用户访问钓鱼网站,钓鱼网站直接在浏览器端请求网银接口进行转账,浏览器自动读取了网银网站域的 Cookie,随请求一同发到网银服务器。
3. 网银服务器收到了请求,验证 Cookies 有效,即进行了转账操作。
假设网银接口服务器正确配置了 CORS 头信息,而浏览器的同源策略也能正常工作的话,第 2 步就会变成:
用户访问钓鱼网站,钓鱼网站尝试令浏览器请求网银接口进行转账,浏览器会先向网银网站的服务器询问 CORS 头,得知仅允许网银网站域请求,读取当前网页域为非网银网站域,则拒绝发出请求到网银服务器。
当然 WebStorage 也是按域存储和访问的,只不过不会自动随请求发送而已,会限制同一域的网页才能访问 WebStorage 的内容。
这套机制的有效性,建立在如下基础上的:
1. 用户用的浏览器是正规的、严格按照同源策略标准开发的;
2. DNS 没有被劫持,或开启了 TLS 验证,即不可能伪造相同的域;
3. 接口服务器正确配置了 CORS 头。
以上三项任意一项有问题都会使得同源策略失效。
当然 Web 安全是一套体系,同源策略只是其中一个机制,用于防范某几个安全风险,就像一个拼图,虽然防不了所有的攻击手段,但所有拼图都拼全了就能有完整的防御性了。