内容安全策略(Content Security Policy)

内容安全策略(Content Security Policy)是一种声明的安全机制,可以让网站运营者能够控制遵循CSP的用户代理(通常是浏览器)的行为。通过控制要启用哪些功能,以及从哪里下载内容,可以减少网站的攻击面。

CSP的主要目的是防御跨站点脚本(cross-ste scripting,XSS)攻击。例如,CSP可以完全禁止内联的JavaScript,并且控制外部代码从哪里加载。它也可以禁止动态代码执行。禁用了所有的攻击源,XSS攻击变得更加困难。

CSP由Mozilla开发,曾经有几年试验过概念,一开始称为内容限制(content restriction),后来改称为内容安全策略。2012年11月CSP 1.0成为W3C的候选议案。

网站通过设置Content-Security-Policy响应头启用所需的CSP策略。

策略实例:

Content-Security-Policy: default-src ‘self’; img-src *;object-src *.cdn.chziyue.com;script-src scripts.chziyue.com

该策略默认只允许资源从同一来源加载,但允许图像从任何URI加载,插件内容只从指定的CDN地址加载,外部脚本仅从scripts.chziyue.com加载。

不像HSTS,CSP策略不是持久的;只在引用他们的页面上生效,之后就消失了。因此,使用CSP风险要小很多。如果产生错误,策略可以立即更新生效。即使被注入响应头,也不会有持续性拒绝服务攻击的风险。

防止混合内容问题

如果安全网页依赖的资源(例如,图像和脚本)是通过明文连接检索的,就会出现混合内容问题。这些年浏览器虽然对这个问题的处理有改善,但它们的方法通常仍然太过宽松。例如,所有浏览器都允许所谓的被动式混合内容(passive mixed content),通常是图像。不出所料的是,在不同浏览器上也有处理差异。例如,Safari目前不强加任何限制,甚至对脚本也是。

因为CSP让我们能够控制其中的内容来源,所以可以用它来指导遵循CSP的浏览器只使用安全协议,也就是对WebSocket协议用wss,剩下的其他都用https。

因此,只解决混合内容问题,而不尝试改善其他的话,可以考虑下面的CSP策略作为出发点:

Content-Security-Policy: default-src https: 'unsafe-inline' 'unsafe-eval';connect-src https: wss:

该策略包括以下三个主要内容:

  • default-src指令确定该页面可以从任何地方(任何主机和任何端口)加载提供了安全连接(https)的内容

  • ‘unsafe-inline’和‘unsafe-eval’表达式重新启用内联JavaScript和动态代码执行,这些默认情况下都是被CSP禁用的。理想情况下,通常不会希望在策略里保留这些表达式,但没有它们大多数现有的应用都会被阻断。

  • connect-src指令控制脚本接口(本如XMLHttpRequest、WebSockets、EventEource等)所使用的内容位置。

一旦确立了最初的策略可以工作,请考虑收紧JavaScript执行(通过删除‘unsafe-inline’和’unsafe-eval’表达式),并用更具体的主机取代通用源的限制(例如,使用https://cdn.chziyue.com取代https)。

策略测试

有关CSP的一个好处是,能够在执行一个策略的同时并行测试其他策略。这意味着,可以在比开发环境要复杂得多的生产环境中部署测试策略。

Content-Security-Policy-Report-Only响应头用于创建一个仅用于测试的策略:

Content-Security-Policy-Report-Only: default-src ‘self’

如果只启用报告的策略出错,并不会阻塞请求,但可以配置报告使得故障可被传递回起初的网站。

浏览器支持

当前浏览器对CSP的支持较好。Chrome和Firefox试验了多年,而且最近其他主流浏览器也逐步开始支持。桌面浏览器里面唯一不支持CSP的是Internet Explorer。Microsoft的新一代浏览器Edge,在Windows 10中首次亮相,支持CSP 1.0。

内容安全策略(Content Security Policy)相关推荐

  1. http内容安全策略Content Security Policy(CSP)

    内容安全策略CSP是安全性的附加层,有助于检测和缓解某些类型的攻击,包括跨站点脚本(Cross Site Scripting (XSS) Software Attack | OWASP Foundat ...

  2. DVWA 黑客攻防实战(十五) 绕过内容安全策略 Content Security Policy (CSP) Bypass

    看到标题,是否有点疑惑 CPS 是什么东东.简单介绍一下就是浏览器的安全策略,如果 标签,或者是服务器中返回 HTTP 头中有 Content-Security-Policy 标签 ,浏览器会根据标签 ...

  3. Vue打包后出现的bug -favicon.ico' because it violates the following Content Security Policy direc

    打开vue的项目,但是页面显示的是Cannot GET,打开控制台之后,发现有一篇红色报错. //Refused to load the image 'http://localhost:8080/fa ...

  4. 正当防卫CSP(content security policy)

    同源策略致使不同域名下的资源不可互相访问,起到安全保护的作用,但这一策略有时会防卫过当,将安全可信的脚本也误认为不安全因素后报错: because it violates the following ...

  5. Content Security Policy的学习理解

    以下内容转载自 http://www.cnblogs.com/alisecurity/p/5924023.html 跨域脚本攻击 XSS 是最常见.危害最大的网页安全漏洞. 为了防止它们,要采取很多编 ...

  6. Content Security Policy 入门教程

    From: http://www.ruanyifeng.com/blog/2016/09/csp.html 跨域脚本攻击 XSS 是最常见.危害最大的网页安全漏洞. 为了防止它们,要采取很多编程措施, ...

  7. because it violates the following Content Security Policy directive: “default-src ‘none‘“

    在打开页面时浏览器报如下错误: Refused to load the script 'http://xx.xx.xx.xx:xxxxx/livereload.js?snipver=1' becaus ...

  8. Refused to execute inline script because it violates the following Content Security Policy directive

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 问题描述 在利用表单向后台提交数据时,前端页面报错: Refused to execute i ...

  9. violates Content Security Policy报错1

    index.html:1 Refused to load the script 'https://webapi.amap.com/maps?v=1.4.13&key=b7063c0343460 ...

最新文章

  1. AWS攻略——使用CodeBuild进行自动化构建和部署静态网页
  2. CUDA Study ---- Hardware Architecture
  3. django+celery+rabitmq
  4. 创业周年记:召唤神龙一周年小记
  5. 教你吃透CSS的盒子模型(Box Model)
  6. zipkin brave mysql_zipkin mysql表结构
  7. 使用计算机效果不理想的应用,有效提高计算机应用课程教学效果的方法探究.doc...
  8. android禁用应用组件,Android彻底退出(关闭)应用程序.docx
  9. 服务器c盘显示0字节可用,c盘0字节可用怎么解决 c盘0字节可用处理方法
  10. 伺服电机回原点的原理_西门子V90伺服电机绝对值编码器回原点常用方法
  11. 敏捷开发用户故事系列之六:用户故事的产生与组织结构
  12. c语言给一个函数添加功能,【C语言】请编写实现以下功能函数:实现对一个8bit数据(unsigned char)的指定位(例如第8位)的置0或置1操作,并保持其他位不变...
  13. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南):签到题A Matrix Equation(高斯消元求线性异或方程组自由元个数)
  14. 平板Android调试打开log,Android 调试日志
  15. HttpServletRequest请求转发
  16. Pytorch向量各个元素的n次方求和
  17. Chapter Two:无限debugger的原理与绕过与断点调试
  18. Mybatis XML文件属性配置
  19. DNS劫持怎么办、如何修复DNS劫持?DNS劫持怎么修复
  20. excel表格打印每页都有表头_表格很长,如何使打印出来的每张纸上都有固定的表头?...

热门文章

  1. 一张涵盖Linux云所有知识点的思维导图(含K8S),你需要吗?
  2. Whale帷幄 - 数字门店解决方案 零售门店的数字化改造
  3. mattermost之数据库操作
  4. 经典题:抓住那头牛,信息学奥赛1253
  5. Git码云项目开发中常用分支
  6. PHP elasticsearch 条件过滤、排序、高亮实现
  7. 什么是关系型数据库(RDBMS)?
  8. 当当图书4折优惠码,抢!
  9. 正则表达式转换为相应的文字小工具
  10. 大型报告厅,会议中心解决方案