白帽子(2)-浏览器安全(同源策略)

浏览器安全章节重点是介绍了一下浏览器的安全功能,并列举了一下功能:

一、同源策略

同源策略(Same origin policy)限制了来自不同源的document或脚本,对当前的“document”读取或设置某些属性。
所谓同源是指:域名、协议、端口相同。
另外,同源策略又分为以下两种:
DOM 同源策略:禁止对不同源页面 DOM 进行操作。这里主要场景是 iframe 跨域的情况,不同域名的 iframe 是限制互相访问的。
XMLHttpRequest 同源策略:禁止使用 XHR 对象向不同源的服务器地址发起 HTTP 请求。

1. 如何理解"限制对当前的“document”读取或设置属性"

我们知道,在浏览器中,我们可以通过“src”属性标签加载跨域资源,但正常请求情况下,浏览器将这些资源获取回来之后只能“纯”文本进行显示(即加载,比如<img src加载图片>),而不能通过javascript执行返回的内容(即读,写内容),如果执行了内容,则该浏览器存在跨域请求漏洞,如下:

www.a.com/test.html

<body>
{
    
    }body{
    
    font-family:
aaaaa
bbbbbb
</body>

www.b.com/test2.html

<style>
@import url(http://www.a.com/test.html)
</style>
<scritpt>
  settimeout(function(){
    
    
    var t = document.body.currentStyle.fontFamily;
    alert(t);
  }, 2000);
</script>

浏览器在javacript脚本中将从a.com返回的css文件,当做javascript的变量执行了alert()语句(本质是javascript读取了返回的内容),违背了浏览器的同源策略.

2. 为什么要有跨域限制

因为存在浏览器同源策略,所以才会有跨域问题。那么浏览器是出于何种原因会有跨域的限制呢。其实不难想到,跨域限制主要的目的就是为了用户的上网安全。
如果浏览器没有同源策略,会存在什么样的安全问题呢。下面从 DOM 同源策略和 XMLHttpRequest 同源策略来举例说明:
如果没有 DOM 同源策略,也就是说不同域的 iframe 之间可以相互访问,那么黑客可以这样进行攻击:

  1. 做一个假网站,里面用 iframe 嵌套一个银行网站http://mybank.com
  2. 把 iframe 宽高啥的调整到页面全部,这样用户进来除了域名,别的部分和银行的网站没有任何差别。
  3. 这时如果用户输入账号密码,我们的主网站可以跨域访问到 http://mybank.com 的 dom 节点,就可以拿到用户的账户密码了。

如果 XMLHttpRequest 同源策略,那么黑客可以进行 CSRF(跨站请求伪造) 攻击:

  1. 用户登录了自己的银行页面 http://mybank.comhttp://mybank.com 向用户的 cookie 中添加用户标识。
  2. 用户浏览了恶意页面 http://evil.com,执行了页面中的恶意 AJAX 请求代码。
  3. http://evil.comhttp://mybank.com 发起 AJAX HTTP 请求,请求会默认把 http://mybank.com 对应 cookie 也同时发送过去。
  4. 银行页面从发送的 cookie 中提取用户标识,验证用户无误,response 中返回请求数据。此时数据就泄露了。
  5. 而且由于 Ajax 在后台执行,用户无法感知这一过程。
    因此,有了浏览器同源策略,我们才能更安全的上网。

3. 跨域需求解决方案

1. CORS(Cross-origin resource sharing,跨域资源共享)
是一个 W3C 标准,定义了在必须访问跨域资源时,浏览器与服务器应该如何沟通。CORS 背后的基本思想,就是使用自定义的 HTTP 头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功,还是应该失败。
安全前提条件:Javascript无法控制该HTTP头部

  • 在请求中需要附加一个额外的 Origin 头部,其中包含请求页面的源信息(协议、域名和端口),以便服务器根据这个头部信息来决定是否给予响应。例如:Origin: http://www.laixiangran.cn
  • 如果服务器认为这个请求可以接受,就在 Access-Control-Allow-Origin 头部中回发相同的源信息(如果是公共资源,可以回发 * )。例如:Access-Control-Allow-Origin:http://www.laixiangran.cn 没有这个头部或者有这个头部但源信息不匹配,浏览器就会驳回请求。正常情况下,浏览器会处理请求。注意,请求和响应都不包含 cookie 信息。

优点
CORS 通信与同源的 AJAX 通信没有差别,代码完全一样,容易维护。
支持所有类型的 HTTP 请求。
缺点
存在兼容性问题,特别是 IE10 以下的浏览器。
第一次发送非简单请求时会多一次请求。

2. 使用crossdomain.xml
这里时一些第三方插件flash采用的同源策略,通过目标网站提供的crossdomain.xml文件来判断是否允许当前的“源”访问flash跨域访问目标内容。

  1. www.qq.com网站存在如下crossdomain.xml文件
<cross-domain-policy>
<allow-acess-from domain = "*.qq.com" />
</cross-domain-policy>
  1. 浏览器在其他网站www.my.com加载了flash,对www.qq.com发起访问,此时,flash会先查看crossdomain.xml是否存在“*.qq.com”,若存在,说明qq.com允许跨域请求

二、浏览器沙箱

这个比较好理解,两个方面:

  1. 为了浏览器的健壮性,防止页面崩溃,影响其他tab页浏览
  2. 限制不可信(插件,代码)访问沙箱以外的内容

三、恶意网址拦截

这个也比较好理解,两种方式

  1. 对于恶意的网址,进行记录(恶意网址库),如果访问链接命中恶意网址,就会进行弹窗警告或禁止访问;
  2. EVSSL证书,这个是说访问的网站具有EVSSL证书,浏览器在页面显示特殊标记出来,如果跳转到“钓鱼”网址,一般是没有这个标注的,这时可以提醒用户当前网址是否正常。该功能需要用户能及时识别出标记

另外需要理解两个概念:
挂马网站:含有恶意脚本的网站,利用浏览器的漏洞执行shellcode, 在用户电脑中植入木马;
钓鱼网站:模仿知名网站,欺骗用户

猜你喜欢

转载自blog.csdn.net/CPriLuke/article/details/106885329