内容安全策略(Content-Security-Policy,简称CSP)

概念

内容安全策略(CSP)是一种web应用技术用于帮助缓解大部分类型的内容注入攻击,包括XSS攻击和数据注入等,这些攻击可实现数据窃取、网站破坏和作为恶意软件分发版本等行为。该策略可让网站管理员指定客户端允许加载的各类可信任资源。

浏览器支持

统计来源:caniuse.com/contentsecuritypolicy & Mozilla

指令参考

Content-Security-Policy 响应头的值可配置一个或多个,多个指令以分号;隔开。

指令

示例

描述

default-src

'self' cdn.example.com

默认配置,若其他指令没有配置,都以此配置的规则为准

script-src

'self' js.example.com

定义允许加载的JavaScript来源

style-src

'self' css.example.com

定义允许加载的样式表来源

img-src

'self' img.example.com

定义允许加载的图片来源

connect-src

'self'

适用于XMLHttpRequest(AJAX),WebSocket或EventSource,当为不允许的来源,浏览器返回一个400的状态码。

font-src

font.example.com

定义允许加载的字体来源

object-src

'self'

定义允许加载的插件来源.

eg,<object>,<embed>或<applet>

media-src

media.example.com

定义允许加载的audio和video.

eg,HTML5 <audio>,<video>元素

frame-src

'self'

定义允许加载的框架来源

sandbox

allow-forms allow-scripts

授权一个沙箱用来请求具有iframe sanbox等类似属性的资源,该沙箱默认为同源策略,禁止弹出窗口,执行插件和脚本.若要允许其他,可增加配置:

allow-forms,allow-same-origin, allow-scripts,allow-top-navigation

report-uri

/some-report-uri

该配置让浏览器发送一个失败报告到指定的路径,也可以增加-Report-only到HTTP头,让浏览器只发送报告(不做阻止动作)

来源配置参考

所有的指令都要在配置后面添加来源列表,多个来源列表可用空格隔开,*和none只能存在一个。

指令值

示例

描述

*

img-src *

无限制,允许所有

'none'

object-src 'none'

禁止加载任何路径的资源

'self'

script-src 'self'

允许加载同源的资源

data:

img-src 'self' data:

允许通过数据模式加载资源

domain.ccc.com

img-src img.ccc.com

允许加载匹配域名的资源

*.ccc.com

img-src *.ccc.com

允许加载匹配域名的资源

https://img.ccc.com

img-src https://img.ccc.com

允许加载匹配https方式的域名资源

https:

img-src https:

允许加载所有匹配https方式的资源

'unsafe-inline'

script-src 'unsafe-inline'

允许使用内联元素,类似,Style

attribute,onclick,scripttag bodies

'unsafe-eval'

script-src 'unsafe-eval'

允许不安全的动态编码,例如eval()

例子

只允许加载同源的所有资源

default-src 'self';

支持*号匹配

default-src 'self' https://*.ccc.com:*;

只允许加载同源的脚本

script-src 'self';

只允许加载同源的和www.ccc.com的脚本

script-src 'self' www.ccc.com;

常见配置

该策略允许加载同源的图片、脚本、AJAX和CSS资源,并阻止加载其他任何资源,对于大多数网站是一个不错的配置。

default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';

被禁止时的报错信息

谷歌浏览器可通过谷歌开发工具查看该报错,通常是按F12

Refused to load the script 'script-uri' because it violates the following Content Security Policy directive: "your CSP directive".

Firefox 可通过 Web Developer Tools: 查看报错

Content Security Policy: A violation occurred for a report-only CSP policy ("An attempt to execute inline scripts has been blocked"). The behavior was allowed, and a CSP report was sent.

参考:

http://content-security-policy.com/

https://developer.mozilla.org/en-US/docs/Web/Security/CSP

http://www.w3.org/TR/CSP2/

Web安全之CSP的更多相关文章

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

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

  2. CSP & CORS

    CSP & CORS 内容安全策略 跨域资源共享 CSP https://developers.google.com/web/fundamentals/security/csp google ...

  3. how to get iframe dom in js

    how to get iframe dom in js https://stackoverflow.com/questions/3999101/get-iframes-document-from-ja ...

  4. 安全相关的head头

    与安全相关的head头包括 参考网站:https://developer.mozilla.org/en-US/docs/Web/HTTP Content-Security-Policy(CSP):禁止 ...

  5. 你不可不知的WEB安全知识(第一部分:HTTPS, TLS, SSL, CORS, CSP)

    译   原文地址:https://dev.to/ahmedatefae/web-security-knowledge-you-must-understand-it-part-i-https-tls-s ...

  6. Web 安全之内容安全策略 (CSP)

    内容安全策略 (CSP, Content Security Policy) 是一个附加的安全层,用于帮助检测和缓解某些类型的攻击,包括跨站脚本攻击 (XSS) 和数据注入等攻击. 这些攻击可用于实现从 ...

  7. CSP的今世与未来

    一.从两个工具说起 最近Google又推出了两款有关CSP利用的小工具,其一为CSP Evaluator,这是一个能够评估你当前输入的CSP能否帮助你有效避免XSS攻击的工具,其用法非常简单,在输入框 ...

  8. 浅谈WEB安全性(前端向)

    相信进来的时候你已经看到alert弹窗,显示的是你cookie信息(为配合博客园要求已删除).单纯地在你的客户端弹出信息只是类似于迫使你在自己的房间脱衣服——没人看得到,自然也不算啥恶意行为.那么如果 ...

  9. CSP -- 运营商内容劫持(广告)的终结者

    缘由 我们公司最近手机端H5 经常受到商户和用户的投诉,说有广告并且导致不能正常进行操作,我们商户自己当然不会加广告了,但是商户和用户可不管这些了,就认为是我们的问题 探索发现根本 目前我们用的很多浏 ...

随机推荐

  1. 计蒜客:百度的科学计算器(简单)【python神解】

    题目链接:https://nanti.jisuanke.com/t/15504 题解:python大法好啊,三行代码无人能敌啊! 下面给出AC代码: b=input() a=input() print ...

  2. CodeForces832-B. Petya and Exam

    补的若干年以前的题目,水题,太菜啦_(:з」∠)_    B. Petya and Exam time limit per test 2 seconds memory limit per test 2 ...

  3. BZOJ 1316: 树上的询问 (点分治+set)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1316 因为只要求存在某条路径长度为K,所以点分,然后用set判断差值是否在set中就可以了. ...

  4. 2017ecjtu-summer training # 11 POJ 2492

    A Bug's Life Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 38280   Accepted: 12452 D ...

  5. msf

    show exploit show payload msf使用数据库加快搜索,不然每次都等半天 service postgresql startmsfdb reinitmsf > db_rebu ...

  6. zookeeper基本讲解及基本命令和配置 (转)

    一.ZooKeeper概述 ZooKeeper是一种为分布式应用所设计的高可用.高性能且一致的开源协调服务,是Google的Chubby一个开源实现,是Hadoop和Hbase的重要组件,它提供了一项 ...

  7. 【老司机经验】CC2530&STM8S105二合一嵌入式学习板设计思路与经验分享

    CC2530&STM8S105二合一嵌入式学习板设计思路与经验分享 1.缘起    这些年来一直在其他公司的实验箱和别人的开发板上进行教学与开发工作,总是觉得功能设计不那么合意.心里突然冒出个 ...

  8. [学习OpenCV攻略][013][Mat - 基本图像容器]

    Mat 是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同矩阵可以是不同的维数)的指针. 矩阵属于多个 Mat 对象, ...

  9. AMD规范学习笔记

    背景 NodeJS的一套比较简洁 Moudles 规范, 使得在服务器端的模块化变得更加简单.很长一段时间,很多公司或者项目都有自己的一套模块化机制, 却未能形成一套统一的标准, NodeJS的Mou ...

  10. Spark_总结一

    Spark_总结一 1.Spark介绍     1.1什么是Spark?     Apache Spark是一个开源的集群计算框架,使数据计算更快(高效运行,快速开发)          1.2Spa ...