WEB 安全是互联网时代重点关注的问题,也是产品设计中必须考虑的一部分。做为一个开发人员,有义务和责任打造安全可靠的 WEB 应用供用户使用,保证用户数据的机密性,完整性以及服务的可用性。
浏览器以协议头、域名、端口的组合标识一个页面的源。两个页面访问的协议头、域名及端口都相同,称两个页面具备相同的源。
下表列出与http://store.company.com/dir/page.html
进行同源检测的结果:html
页面地址 | 检测结果 | 缘由 |
---|---|---|
http://store.company.com/dir2... | 成功 | |
http://store.company.com/dir/... | 成功 | |
https://store.company.com/sec... | 失败 | 协议差别(https/http) |
http://store.company.com:81/dir/etc.html | 失败 | 端口差别(81/80) |
http://news.company.com/dir/o... | 失败 | 子域名差别(news/store) |
跨源页面之间使用 XMLHttpRequest 和 Fetch API 请求数据,经过<img>
,<link>
,<script>
等 HTML 标签引用资源,这里统称为资源访问,都将受到浏览器的同源策略的控制。跨源资源访问时,不一样的交互方式默认有不一样的浏览器限制:ajax
<img src="..." />
,<iframe src="..."/>
,<script src="..." />
等标签引入其余源资源,浏览器默认是容许的。浏览器最初使用 cookie 做为本地存储,H5新增 LocalStorage 和 IndexedDB 的存储方式。
浏览器经过检测 cookie 的 domain 属性控制源,例若有 cookie: key=hello 的 domain 设为.jaylin.wang
,local.jaylin.wang
,www.jaylin.wang
,jaylin.wang
都可访问,有 cookie: key2=world 的 domain 设置为local.jaylin.wang
, 则只有local.jaylin.wang
可访问。cookie 的 httpOnly 属性可控制cookie只能在服务端读取。跨域
LocalStorage 和 IndexedDB 会根据不一样源相互独立,数据的写入和读取都是针对当前源的存储,目前浏览器没有提供跨源读写的支持。浏览器
浏览器默认的同源策略机制下,也为开发者提供了改变的机制,列出经常使用的几种方式:安全
在一个页面中,经过设置 document.domain 的值,能够将子域名的源设置为父级域名。cookie
浏览器支持经过Content-Security-Policy
响应头限制内容来源,确保加载内容的可信度。这个机制能够减小 XSS 攻击,dom
浏览器支持 CORS 配置可信的跨域读资源,以适应WEB应用扩展的需求。网站
用户在使用浏览器浏览网页的过程当中,不乏有恶意网站给用户带来潜在的安全问题。常见的恶意网站有如下几类:spa
浏览器一般会维护一份被举报和恶意网站列表,检测用户将要访问的目标网站存在于站点列表中,则提示警告信息以阻止用户的继续访问。设计