浏览器网络及安全机制解析

266 阅读5分钟

本文已参与掘金创作者训练营第三期「话题写作」赛道,详情查看:掘力计划|创作者训练营第三期正在进行,「写」出个人影响力

由于本人之前写过关于浏览器安全的部分:XSS、CSRF。

具体看文章:《安全问题 CSRF 与 XSS》

所以,本篇文章就不再介绍关于这两个了。而是说说Web安全中的CSP(内容安全策略)。

CSP - 内容安全策略

内容安全策略是一个额外的安全层,用于检测并削弱某种特定类型的攻击,其中就包括跨站脚本攻击(XSS)和数据注入攻击等。

CSP被设计成完全向后兼容。不支持CSP的浏览器也能与实现了CSP的服务器正常合作。不支持CSP的浏览器只会忽略它,如常运行,默认为网页内容实用标准的同源策略。

为了使得CSP可用,你需要配置你的网络服务器返回 Content-Security-Policy

meta 元素也可以支持该策略:

<meta http-equiv='Content-Security-Policy' content="default-src 'self'; img-src https://*; child-src 'none';">

跨站脚本攻击

CSP主要目的:减少和报告XSS攻击,XSS攻击利用了浏览器对与从服务器获取的内容的信任。恶意脚本在受害者的浏览器中得以运行,因为浏览器信任其内容来源,即使脚本并非来自于它本该来的地方。

CSP的原理:

通过指定有效域,即浏览器认可的可执行脚本的有效来源,使服务器管理者有能力减少或消除XSS攻击所依赖的载体。

一个CSP兼容的浏览器仅会执行从白名单域获取到的脚本文件,忽略所有的其他脚本文件。

数据包嗅探攻击

和为嗅探?指的是窃听流量,或者将捕获流量路由,分析和监控的目标处。

正常的使用,可以做到分析网络的使用情况,对网络问题进行故障排查,以及通过监控会话进行各种开发与测试。

如果黑客进行攻击,就会从复杂的信息当中提取出有意义的信息。比如说,用户名、密码、密钥、银行账号、交易记录等。

嗅探被分为被动嗅探、主动嗅探:

  1. 被动嗅探 这类嗅探往往发生在集线器上。现如今集线器使用的较少,往往被交换机取代了,所以这种攻击方式显得落后。

  2. 主动嗅探 交换机能够学习带有目标MAC地址CAM(二层交换机地址)表。根据CAM表,交换机可以决定将哪个网络数据包发送到何处。

在主动嗅探时,交换器将大量虚假的请求发往交换机,以填满CAM表。当CAM表填满之后,交换机以'合法'的方式将网络流量发送到各个端口,这样就会导致攻击者能够进行嗅探。

容易收到嗅探器的攻击协议:

  • HTTP
  • TELNET
  • POP
  • SNMP

如何限制嗅探器?

最重要的就是进行加密了,比如说服务器可以指定所有内容必须通过HTTPS加载。一个完整的数据安全传输策略不仅强制使用HTTPS进行传输,也为所有的Cookie标记安全标示,并且提供自动的重定向使得HTTP页面导向HTTPS版本。网站也可以使用:Strict-Transport-Security HTTP头部来确保链接它的浏览器只使用加密通道。

使用CSP

如何使用CSP呢?这涉及到添加Content-Security-Policy HTTP头部到一个页面,并配置相应的值。用来控制用户代理(浏览器等)可以为哪些页面获取哪些资源。

举个例子:

一个可以上传文件和显示图片的页面,应该允许图片来自于任何地方(拖拽上传,不一定从哪儿拖的),但限制表单的action属性只可以赋值为指定的端点。一个经过恰当设计的内容安全策略应该可以有效的保护页面免受跨站脚本攻击。

制定策略

一个策略是由一系列策略指令组成的,每个策略指令都描述了一个针对某个特定类型资源以及生效范围的策略。接下来我们来看看实例。

  • 示例一 要求:一个网站想要所有内容均来自站点的同一个源(不包括子域名)

    Content-Security-Policy: default-src 'self'

default-src策略允许指定一个/多个源。

self指向与要保护文件所在的源,包括相同的URL scheme与端口号。必须要有单引号。

  • 示例二 要求:一个网站允许内容来自信任域名与其子域名

    Content-Security-Policy: default-src 'self' *.trusted.com

  • 示例三 要求:一个网站允许网页应用的用户在他们自己的内容中包含来自任何源的图片,但是限制音频和视频需要从信任的资源获得,所有脚本必须从特定的主机服务器获取可信的代码。

    Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com

在这里,各种内容默认仅允许从文档所在源获取,但存在如下例外:

  • 图片可以从任何地方加载。

  • 多媒体文件仅允许从media1.com、media2.com加载。

  • 多运行脚本仅允许来自userscripts.example.com。

  • 示例四 要求:一个线上银行网站的所有内容想要通过SSL方式获取,以避免攻击者窃听用户发出的请求。

    Content-Security-Policy: default-src onlinebanking.jumbobank.com

该服务器仅允许通过HTTPS方式,仅从onlinebanking.jumbobank.com域名来访问文档。

  • 示例五 要求:一个在线邮箱的管理者想要允许在邮件里包含HTML,同样图片允许从任何地方加载,但不允许JavaScript或者其他潜在的危险内容。

    Content-Security-Polity: default-src 'self' *.mailsite.com; img-src *

总结

  • CSP可以减少和报告XSS攻击
  • CSP可以防止数据包嗅探攻击
  • 如何使用CSP