同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也最基本的安全功能。
同源是指host、子域名、端口、协议。
在浏览器中,一些标签(<script>、<img>、<iframe>、<link>等)是能够跨域加载资源的而不受同源策略影响的。
对于浏览器来讲,除了dom、cookie、xhr会受到同源策略限制外,浏览器加载的一些第三方插件也有各自的同源策略。比方说,flash它主要经过目标网站提供的crossdomain.xml文件(策略文件)判断是否容许当前“源”的flash跨域访问目标资源。
浏览器经过多进程架构和sandbox的保护,提升安全性。浏览器还会周期性地从服务端获取一份最新的恶意网址黑名单,实现对恶意网址的拦截。web
XSS(跨站脚本攻击):一般指黑客经过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。
反射型XSS:恶意代码并无保存在目标网站,经过引诱用户点击一个连接到目标网站的恶意连接来实施攻击的。
存储型XSS:恶意代码会被存储在服务器端。
常见的XSS payload(恶意脚本),经过读取浏览器Cookie对象,从而发起“cookie挟持”攻击。
XSS攻击利用的技巧:利用字符编码,绕过长度限制(location.hash自己没有长度限制,可是浏览器的地址栏是有长度限制的,要是地址栏的长度也不够用,还能够再使用加载远程JS的方法,来写更多的代码),使用<base>标签,window.name(不少时候window对象不受同源策略限制)等。
XSS防护:
Cookie的“HttpOnly”标识能够防止“Cookie劫持”。
验证码、修改密码前输入旧密码这样的功能都能有效的防止XSS payload。但这并不能限制住XSS攻击。
输入(输出)检查(客户端和服务端都检查)。跨域
csrf(跨站点请求伪造):
浏览器所持有的cookie分两种,session cookie和Third-party cookie(本地cookie,保存在本地)。在浏览器进程的生命周期内,tab页内session cookie都有效。利用这点,能够跨站点伪造一些请求,带上这个session cookie,以实现某种目的。浏览器
csrf能成功伪造一个请求,主要是能预测url的全部参数和参数值。安全
预防csrf:参数加密(某些url没法被用户收藏了,给数据分析工做带来困扰),新增参数token等。服务器
ClickJacking(点击挟持):
一种视觉上的欺骗手段。经过透明不可见的iframe,诱使用户刚好点击在iframe页面的一些功能性按钮上。cookie
有关安全的http响应头:
X-Frame-Options:deny(拒绝当前页面加载iframe),SAMEORIGIN(frame页面的地址只能为同域名下的页面),ALLOW-FROM(定义能够容许frame加载的页面地址)。session
Content-Security-Policy:能够在响应头设置,也能够在meta设置。具体设置查阅MDN。架构
X-XSS-Protection:当检测到跨站脚本攻击 (XSS)时,浏览器将中止加载页面。
除非显式修改,不然浏览器默认为1:启用XSS过滤。若是检测到跨站脚本攻击,浏览器将清除页面(删除不安所有分)cors
CORS:跨域资源共享。
出于安全缘由,浏览器限制从脚本内发起的跨源HTTP请求。 例如,XMLHttpRequest和Fetch API遵循同源策略。但若是响应报文包含正确的cors响应头,能够访问跨域资源。
对于“非简单请求”,浏览器先使用options方法发起预检请求,从而获取服务端是否容许该跨域请求。服务端确认后才发起实际的http请求。dom
参考: