返回顶部
首页 > 资讯 > 前端开发 > VUE >HTML5内容安全策略是什么
  • 382
分享到

HTML5内容安全策略是什么

2024-04-02 19:04:59 382人浏览 八月长安
摘要

本文小编为大家详细介绍“HTML5内容安全策略是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“html5内容安全策略是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

本文小编为大家详细介绍“HTML5内容安全策略是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“html5内容安全策略是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

万维网的安全策略植根于同源策略。例如www.mb5u.com的代码只能访问www.mb5u.com的数据,而没有访问Http://www.baidu.com的权限。每个来源都与网络的其它部分分隔开,为开发人员构建了一个安全的沙箱。理论上这是完美的,但是现在攻击者已经找到了聪明的方式来破坏这个系统。

        这就是XSS跨站脚本攻击,通过虚假内容和诱骗点击来绕过同源策略。这是一个很大的问题,如果攻击者成功注入代码,有相当多的用户数据会被泄漏。

        现在我们介绍一个全新的、有效的安全防御策略来减轻这种风险,这就是内容安全策略(ContentSecurity Policy,CSP)。

来源白名单

        XSS攻击的核心是利用了浏览器无法区分脚本是被第三方注入的,还是真的是你应用程序的一部分。例如Google +1按钮会从https://apis.google.com/js/plusone.js加载并执行代码,但是我们不能指望从浏览器上的图片就能判断出代码是真的来自apis.google.com,还是来自apis.evil.example.com。浏览器下载并执行任意代码的页面请求,而不论其来源。

        CSP定义了Content-Security-PolicyHTTP头来允许你创建一个可信来源的白名单,使得浏览器只执行和渲染来自这些来源的资源,而不是盲目信任服务器提供的所有内容。即使攻击者可以找到漏洞来注入脚本,但是因为来源不包含在白名单里,因此将不会被执行。

        以上面Google +1按钮为例,因为我们相信apis.google.com提供有效的代码,以及我们自己,所以可以定义一个策略,允许浏览器只会执行下面两个来源之一的脚本。

        Content-Security-Policy:script-src 'self' https://apis.google.com

        是不是很简单?script-src可以为指定页面控制脚本相关权限。这样浏览器只会下载和执行来自http://apis.google.com和本页自身的脚本。

        一旦我们定义了这个策略,浏览器会在检测到注入代码时抛出一个错误(请注意是什么浏览器)。

内容安全策略适用于所有常用资源

        虽然脚本资源是最明显的安全隐患,但是CSP还提供了一套丰富的指令集,允许页面控制加载各种类型的资源,例如如下的类型:

content-src:限制连接的类型(例如XHR、websockets和EventSource)

font-src:控制网络字体的来源。例如可以通过font-src https://themes.googleusercontent.com来使用Google的网络字体。

frame-src:列出了可以嵌入的frame的来源。例如frame-src https://youtube.com只允许嵌入YouTube的视频。。

img-src:定义了可加载图像的来源。

media-src:限制视频和音频的来源。

object-src:限制Flash和其他插件的来源。

style-src:类似于Script-src,只是作用于CSS文件。

        默认情况下,所有的设置都是打开的,不做任何限制。你可以以分号分隔多个指令,但是类似于script-src https://host1.com;script-src https://host2.com的形式,第二个指令将会被忽略。正确的写法是script-src https://host1.com https://host2.com。

        例如,你有一个应用需要从内容分发网络(CDN,例如https://cdn.example.net)加载所有的资源,并且知道不需要任何frame和插件的内容,你的策略可能会像下面这样:

Content-Security-Policy:default-src https://cdn.example.net; frame-src 'none'; object-src 'none'

细节

        我在例子里使用的HTTP头是Content-Security-Policy,但是现代浏览器已经通过前缀来提供了支持:Firefox使用x-Content-Security-Policy,WEBKit使用X-WebKit-CSP。未来会逐步过渡到统一的标准。

        策略可以根据每个不同的页面而设定,这提供了很大的灵活度。因为你的站点可能有的页面有Google +1的按钮,而有的则没有。

        每个指令的来源列表可以相当灵活,你可以指定模式(data:, https:),或者指定主机名在一个范围(example.com,它匹配主机上的任意来源、任意模式和任意端口),或者指定一个完整的URI(https://example.com:443,特指https协议,example.com域名,443端口)。

        你在来源列表中还可以使用四个关键字:

“none”:你可能期望不匹配任何内容

“self”:与当前来源相同,但不包含子域

“unsafe-inline”:允许内联javascript和CSS

“unsafe-eval”:允许文本到JS的机制例如eval

        请注意,这些关键词需要加引号。

沙箱

        这里还有另外一个值得讨论的指令:sandbox。和其他指令有些不一致,它主要是控制页面上采取的行为,而不是页面能够加载的资源。如果设置了这个属性,页面就表现为一个设置了sandbox属性的frame一样。这对页面有很大范围的影响,例如防止表单提交等。这有点超出了本文的范围,但是你可以在HTML5规范的“沙箱标志设置”章节找到更多信息。

有害的内联代码

        CSP基于来源白名单,但是它不能解决XSS攻击的最大来源:内联脚本注入。如果攻击者可以注入包含有害代码的script标签(<script>sendMyDataToEvilDotCom();</script>),浏览器并没有好的机制来区分这个标签。CSP只能通过完全禁止内联脚本来解决这个问题。

        这个禁止项不仅包括脚本中嵌入的script标签,还包括内联事件处理程序和javascrpt:这种URL。你需要把script标签的内容放到一个外部文件里,并且用适当的addEventListener的方式替换javascript:和<a&hellip;onclick=”[JAVASCRIPT]”>。例如,你可能会把下面的表单:

<script>

  function doAmazingThings() {

    alert('YOU AM AMAZING!');

  }

</script>

<button onclick='doAmazingThings();'>Am I amazing?</button>

        重写为下面的形式:

<!-- amazing.html -->

<script src='amazing.js'></script>

<button id='amazing'>Am I amazing?</button>

// amazing.js

function doAmazingThings() {

  alert('YOU AM AMAZING!');

}

document.addEventListener('DOMContentReady', function () {

  document.getElementById('amazing')

          .addEventListener('click', doAmazingThings);

});

        无论是否使用CSP,以上的代码其实有更大的优点。内联JavaScript完全混合了结构和行为,你不应该这么做。另外外联资源更容易进行浏览器缓存,开发者更容易理解,并且便于编译和压缩。如果采用外联代码,你会写出更好的代码。

        内联样式需要以同样的方式进行处理,无论是style属性还是style标签都需要提取到外部样式表中。这样可以防止各式各样神奇的数据泄漏方式。

        如果你必须要有内联脚本和样式,可以为script-src or style-src属性设定'unsafe-inline值。但是不要这样做,禁止内联脚本是CSP提供的最大安全保证,同时禁止内联样式可以让你的应用变得更加安全和健壮。这是一个权衡,但是非常值得。

Eval

        即便攻击者不能直接注入脚本,他可能会诱使你的应用把插入的文本转换为可执行脚本并且自我执行。eval() , newFunction() , setTimeout([string], ...) 和setInterval([string], ...) 都可能成为这种危险的载体。CSP针对这种风险的策略是,完全阻止这些载体。

        这对你构建应用的方式有一些影响:

        通过内置的JSON.parse解析JSON,而不依靠eval。IE8以后的浏览器都支持本地JSON操作,这是完全安全的。

        通过内联函数代替字符串来重写你setTimeout和setInterval的调用方式。例如:  

setTimeout("document.querySelector('a').style.display = 'none';", 10);

        可以重写为:

setTimeout(function () { document.querySelector('a').style.display = 'none'; }, 10);

        避免运行时的内联模版:许多模版库都使用new Function()以加速模版的生成。这对动态程序来说非常棒,但是对恶意文本来说存在风险。

报告

        CSP可以在服务器端阻止不可信的资源对用户来说非常有用,但是对于获取各种发送到服务器的通知来说对我们却非常有用,这样我们就能识别和修复任何恶意脚本注入。为此你可以通过report-uri指令指示浏览器发送JSON格式的拦截报告到某个地址。

Content-Security-Policy: default-src 'self'; ...; report-uri /my_amazing_csp_report_parser;

        报告看起来会像下面这样:

{

  "csp-report": {

    "document-uri": "http://example.org/page.html",

    "referrer": "http://evil.example.com/",

    "blocked-uri": "http://evil.example.com/evil.js",

    "violated-directive": "script-src 'self' https://apis.google.com",

    "original-policy": "script-src 'self' https://apis.google.com; report-uri http://example.org/my_amazing_csp_report_parser"

  }

}

        其中包含的信息会帮助你识别拦截的情况,包括拦截发生的页面(document-uri),页面的referrer,违反页面策略的资源(blocked-uri),所违反的指令(violated-directive)以及页面所有的内容安全策略(original-policy)。

现实用法

        CSP现在在Chrome 16+和Firefox 4+的浏览器上可用,并且它在IE10上预计会获得有限的支持。Safari目前还不支持,但是WebKit每晚构建版已经可用,所以预计Safari将会在下面的迭代中提供支持。

        下面让我们看一些常用的用例:

        实际案例1:社会化媒体widget

Google +1 button包括来自https://apis.google.com的脚本,以及嵌入自https://plusone.google.com的iframe。你的策略需要包含这些源来使用Google +1的按钮。最简单的策略是script-src https://apis.google.com; frame-src https://plusone.google.com。你还需要确保Google提供的JS片段存放在外部的JS文件里。

Facebook的Like按钮有许多种实现方案。我建议你坚持使用iframe版本,因为它可以和你站点的其它部分保持很好的隔离。这需要使用frame-src https://facebook.com指令。请注意,默认情况下,Facebook提供的iframe代码使用的是相对路径//facebook.com,请把这段代码修改为https://facebook.com,HTTP你没有必要可以不使用。

Twitter的Tweet按钮依赖于script和frame,都来自于https://platfORM.twitter.com(Twitter默认提供的是相对URL,请在复制的时候编辑代码来指定为HTTPS方式)。

        其它的平台有相似的情况,可以类似的解决。我建议把default-src设置为none,然后查看控制台来检查你需要使用哪些资源来确保widget正常工作。

        使用多个widget非常简单:只需要合并所有的策略指令,记住把同一指令的设置都放在一起。如果你想使用上面这三个widget,策略看起来会像下面这样:

script-src https://apis.google.com https://platform.twitter.com; frame-src https://plusone.google.com https://facebook.com https://platform.twitter.com

        实际案例2:防御

        假设你访问一个银行网站,并且希望确保只加载你所需的资源。在这种情况下,开始设置一个默认的权限来阻止所有的内容(default-src &lsquo;none&rsquo;),并且从这从头构建策略。

        比如,银行网站需要从来自https://cdn.mybank.net的CDN加载图像、样式和脚本,并且通过XHR连接到https://api.mybank.com/来拉取各种数据,还需要使用frame,但是frame都来自非第三方的本地页面。网站上没有Flash、字体和其他内容。这种情况下我们可以发送最严格的CSP头是:

Content-Security-Policy: default-src 'none'; script-src https://cdn.mybank.net; style-src https://cdn.mybank.net; img-src https://cdn.mybank.net; connect-src https://api.mybank.com; frame-src 'self'

        实际案例3:只用SSL

        一个婚戒论坛管理员希望所有的资源都通过安全的方式进行加载,但是不想真的编写太多代码;重写大量第三方论坛内联脚本和样式的代码超出了他的能力。所以以下的策略将会是非常有用的:

Content-Security-Policy: default-src https:; script-src https: 'unsafe-inline'; style-src https: 'unsafe-inline'

        尽管default-src指定了https,脚本和样式不会自动继承。每个指令将会完全覆盖默认资源类型。

未来

        W3C的Web应用安全工作组正在制定内容安全策略规范的细节,1.0版本将要进入最后修订阶段,它和本文描述的内容已经非常接近。而public-webappsec@邮件组正在讨论1.1版本,浏览器厂商也在努力巩固和改进CSP的实现。

        CSP 1.1在画板上有一些有趣的地方,值得单独列出来:

        通过meta标签添加策略:CSP的首选设置方式是HTTP头,它非常有用,但是通过标记或者脚本设置会更加直接,不过目前还未最终确定。WebKit已经实现了通过meta元素进行权限设置的特性,所以你现在可以在Chrome下尝试如下的设置:在文档头添加<metahttp-equiv="X-WebKit-CSP" content="[POLICY GOES HERE]">。

        你甚至可以在运行时通过脚本来添加策略。

        DOM API:如果CSP的下一个迭代添加了这个特性,你可以通过Javascript来查询页面当前的安全策略,并根据不同的情况进行调整。例如在eval()是否可用的情况下,你的代码实现可能会有些许不同。这对JS框架的作者来说非常有用;并且API规范目前还非常不确定,你可以在规范草案的脚本接口章节找到最新的迭代版本。

        新的指令:许多新指令正在讨论中,包括script-nonce:只有明确指定的脚本元素才能使用内联脚本;plugin-types:这将限制插件的类型;form-action:允许form只能提交到特定的来源。

读到这里,这篇“HTML5内容安全策略是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网VUE频道。

--结束END--

本文标题: HTML5内容安全策略是什么

本文链接: https://lsjlt.com/news/90674.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • HTML5内容安全策略是什么
    本文小编为大家详细介绍“HTML5内容安全策略是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“HTML5内容安全策略是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2024-04-02
  • Html5中内容安全策略CSP的示例分析
    这篇文章主要为大家展示了“Html5中内容安全策略CSP的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Html5中内容安全策略CSP的示例分析”这篇文...
    99+
    2024-04-02
  • 云服务器安全策略有哪些内容
    云服务器安全策略主要包括以下内容: 访问控制:云服务器需要用户名和密码才能使用,并且可以限制某些用户访问云服务器,避免恶意攻击行为。 防止数据泄露:在使用云服务器的过程中,需要保护数据的安全,例如使用SSL证书保护数据传输过程中的加密,...
    99+
    2023-10-27
    安全策略 服务器 内容
  • MySQL 5.7密码安全策略是什么
    小编给大家分享一下MySQL 5.7密码安全策略是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!查看现有的密码策略mysql> SHOW VARIABLES LIKE '...
    99+
    2024-04-02
  • 云服务器安全策略是什么
    云服务器安全策略可以包括以下方面: 数据备份:云服务器通常会提供多份配置数据,并通过数据备份措施来保护数据的一致性。数据备份可以在服务器故障或宕机时进行,以便灾难恢复。 多重身份验证:云服务器通常使用多重身份验证来确保安全,包括使用多个...
    99+
    2023-10-26
    安全策略 服务器
  • 云服务器安全策略包括哪些内容
    首先,云服务器提供商必须采取措施来确保数据的安全性。云服务器中的数据通常存储在云服务器提供商的服务器上,因此云服务器提供商需要采取措施来确保数据的安全性,例如数据加密、备份、访问控制等。此外,云服务器提供商还需要定期进行漏洞扫描和安全测试,...
    99+
    2023-10-28
    安全策略 服务器 内容
  • 云服务器安全策略有哪些内容呢
    云服务器安全策略主要包括以下几个方面: 数据备份和恢复:云服务器具有高可用性和冗余性,当云服务器出现故障时,数据可以快速恢复。因此,需要定期对云服务器的数据进行备份和恢复,以保证数据的安全性。 网络安全:云服务器需要与互联网相连,因此网...
    99+
    2023-10-28
    安全策略 服务器 内容
  • 云服务器安全策略是什么意思
    云服务器提供商通常会提供各种安全策略来保护云服务器的数据和应用程序。这些策略可能包括:访问控制、安全审计、数据备份和恢复、多因素身份验证和授权、反病毒扫描和防火墙保护等等。 访问控制是确保只有授权的人员可以访问服务器的一个方法。它可能包括...
    99+
    2023-10-27
    安全策略 服务器
  • 云服务器安全策略是什么意思啊
    云服务器提供商通常会采用各种安全措施来保护云服务器的安全。其中包括访问控制、防火墙、加密、安全漏洞扫描等。例如,云服务器提供商可以使用SSL证书来加密用户数据的传输,以确保数据的安全性。另外,云服务器提供商还可以使用防病毒软件和防火墙来保护...
    99+
    2023-10-28
    安全策略 服务器
  • windows本地安全策略打开快捷键是什么
    这篇文章主要介绍“windows本地安全策略打开快捷键是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“windows本地安全策略打开快捷键是什么”文章能帮助大家解决问题。本地安全策略打开快捷键:...
    99+
    2023-07-02
  • jvm内存分配的策略是什么
    JVM(Java虚拟机)内存分配的策略包括以下几个方面: 静态分配:JVM在启动时会根据预先设置的参数分配一块固定大小的内存给各...
    99+
    2024-02-29
    jvm
  • 云服务器安全策略包括什么
    云服务器提供商通常会为他们的云服务器提供多种安全策略,以保护其服务器资源和用户数据。其中一些策略可能包括: 访问控制:在云服务器之上使用访问控制措施可以限制未经授权的访问,防止数据泄露或其他安全问题。 安全审计:云服务器提供商可以使用安...
    99+
    2023-10-27
    安全策略 服务器
  • webservice安全策略怎么配置
    Web服务安全策略的配置应该包括以下几个方面:1. 认证和授权:配置Web服务的认证和授权机制,确保只有授权用户可以访问服务。2. ...
    99+
    2023-06-13
    webservice安全
  • Mybatis-plus全局id生成策略是什么
    这篇“Mybatis-plus全局id生成策略是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mybatis-plus全...
    99+
    2023-06-26
  • 云服务器安全策略包括什么和什么
    防火墙:防火墙可以帮助用户过滤和限制网络流量,防止非法访问和攻击。可以使用静态和动态防火墙来保护云服务器的网络安全。 SSL/TLS加密:SSL/TLS加密是一种安全协议,可以用于保护云服务器的数据传输安全。使用SSL/TLS加密可以有效...
    99+
    2023-10-27
    安全策略 服务器
  • Redis删除策略和逐出策略是什么
    这篇文章主要介绍了Redis删除策略和逐出策略是什么,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。过期数据先来看三个key值,分别为sex、na...
    99+
    2024-04-02
  • 怎么理解PostgreSQL行安全策略
    这篇文章主要讲解了“怎么理解PostgreSQL行安全策略”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解PostgreSQL行安全策略”吧!行安全策...
    99+
    2024-04-02
  • Linux中怎么设置安全策略
    本篇文章给大家分享的是有关Linux中怎么设置安全策略,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  1. 禁止系统响应任何从外部/内部来的ping请求攻击者一般首先通过pi...
    99+
    2023-06-13
  • Redis的内存淘汰策略和过期删除策略的区别是什么
    这篇文章主要介绍“Redis的内存淘汰策略和过期删除策略的区别是什么”,在日常操作中,相信很多人在Redis的内存淘汰策略和过期删除策略的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方...
    99+
    2024-04-02
  • MongoDB的容灾与备份恢复策略是什么
    MongoDB提供了多种容灾与备份恢复策略,包括: 复制集(Replica Set):MongoDB的复制集是一组MongoDB...
    99+
    2024-05-07
    MongoDB
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作