浏览器安全

浏览器安全简介

浏览器进程:

浏览器进程,渲染进程,插件进程,扩展进程javascript

浏览器安全发展史

  • IE8 推出 XSS filter(修改其中的关键字符使得攻击无效)
  • firefox4 推出 content security policy。(由服务器返回一个 http 头,并在其中描述页面应该遵照的安全策略)
X-content-security-policy:allow 'self' ;img-src *;media-src media.com 
复制代码

跨站脚本攻击(XSS)

分类

  1. 反射型 XSS

反射型 xss 只是简单的把用户输入的数据“反射”给浏览器。黑客须要诱导用户“点击”一个恶意连接,才能攻击成功。html

  1. 存储型 XSS

存储型 XSS 会把用户输入的数据“存储”在服务器端java

  1. DOM Based XSS

经过修改页面的 DOM 结点造成 XSS。从效果来看是反射型 XSS。ajax

xss预防方式

  • cookie 设置 HttpOnly

在没有设置 HttpOnly 的 cookie 中,攻击者能够经过 document.cookie 获得网站的 cookie。HttpOnly 是在 Set-Cookie 时服务端标记的。浏览器

  • 输入检查

输入检查通常是检查用户输入的数据中是否包含一些特殊的字符,如 <,> 等。若是发现特殊符号,则将这些字符过滤或者编码。安全

比较智能的“输入检查”,可能会匹配 XSS 的特征。好比查找用户数据中是否包含<script>,javascript 等敏感字符。这种输入检查,叫作“XSS filter”bash

  • 输出检查服务器

    • 安全的编码函数
  • 防护 DOM Based XSScookie

事实上,DOM Based XSS 是从 javascript 中输出数据到 html 页面里。而前面的防护手段是针对从服务器应用输出到 html 页面的xss 漏洞。session

解决方法:从 javascript 输出到 html 页面,至关于一次 xss 输出的过程,须要分语境使用不一样的编码函数。(javascriptencode,htmlencode)

会触发DOm based xss 的地方:

  1. document.write()
  2. document.writeln()
  3. xxx.innerHTML()
  4. xxx.outerHTML()
  5. innerHTML.replace()
  6. document.attachEvent()
  7. window.attachEvent()
  8. document.location.replace()
  9. document.locaion.assign()

跨站点请求伪造(CSRF)

概念:是攻击者利用用户身份操做帐户的一种攻击方式。

CSRF 进阶

浏览器的 cookie 策略

浏览器所持有的 cookie 分为两类:一种是“session cookie”,也称为“临时 cookie”。另外一种是“ third-party cookie”,也称为 “本地 cookie”。

二者的区别在于,third-party cookie 在 set-cookie 时设置了 expire 过时时间,到达过时时间时,cookie 才会失效。session cookie 没有设置过时时间,浏览器关闭,session cookie 就会过时。

session cookie 保存在浏览器进程中。而 third-party cookie 保存在本地。

若是浏览器从一个域的页面中,要加载另外一个域的资源。因为安全缘由,某些浏览器会阻止 third-party cookie 的发送。

P3P 头的反作用

P3P Header 是 W3C 制定的一项关于隐私的标准,全称是 The Platform for Privacy Preferences。

若是网站返回给浏览器的 http 头中包含 P3P 投,则在某种程度上来讲,将容许浏览器发送第三方 cookie 。在 IE 下即使是 <iframe>,<script> 等标签也将再也不拦截第三方 cookie 的发送。

CSRF 的防护

1 验证码

验证码被认为是对抗 CSRF 攻击最简洁而有效的防护方法。可是因为处于用户体验考虑,不可能每一个请求都加上验证码的。

2 Referer Check

referer check 在互联网中最多见的应用就是“防止图片盗链”。同理,referer check也能够被用于检查是否来自合法的“源”

即便咱们能够经过检查 referer 是否合法来判断用户是否被 csrf 攻击,也仅仅是知足了防护的充分条件。

referer check 的缺陷在于,服务器并非何时都能去到 referer。(不少用户出于隐私保护的考虑,限制了 referer 的发送。在某些状况下,浏览器也不会发送referer,好比从 https 跳转到 http ,出于安全的考虑,浏览器也不会发送 referer)

3 Anti CSRF Token
CSRF 的本质

CSRF 可以攻击成功,其本质的缘由是重要操做的全部参数都是能够被攻击者猜想到的。

出于这个缘由,能够经过,把参数加密,或者使用一些随机数,从而让攻击者没法猜想到参数值。

可是因为加密或混淆猴的 URL 将变得很是难读,对于用户体验来讲不是很好。对于数据分析工做来讲,会带来很大的困扰。

因此,请求携带一个 token(一个随机值)是最好的方法。

Token 的使用原则(保密性和随机性)

防护 CSRF 的 Token,是根据 “不可预测性原则”设计的方案,因此 Token 的生成必定要足够随机,须要使用安全的随机数生成器生成 Token。

在使用 Token 时,应该尽可能把 Token 放在表单中。把敏感操做由 GET 变成 POST,以 form 表单(或者 ajax)的形式提交,避免 token 泄露。