原文: https://60devs.com/using-content-security-policy.html
内容安全策略(CSP)是一种浏览器机制,有助于阻止跨站脚本(XSS)攻击。
什么是XSS(跨站脚本攻击)?它是一种攻击者为获取安全数据权限向网页注入客户端脚本或注入恶意软件的攻击方式。一旦注入脚本获得页面权限,它需要发送数据或以某种方式与攻击者交互。常见阻止XSS的措施即阻止恶意的客户端脚本注入。然后,实际情况常常难以确保网站或应用完全免受注入。考虑到注入仍是可能,我们能做些什么?答案是CSP。
CSP是配置每个网页使用HTTP头。当浏览器加载HTML文档时,HTTP请求的响应头交付文档源于请求使用内容安全策略配置 HTML文档的全部内容。
绝大多数浏览器支持Content-Security-Policy这个特殊头,并且IE10++支持X-Content-Secuirity-Policy。IE9及以下版本不支持CSP。
配置
CSP通过配置一个单独头(Content-Security-Policy或X-Content-Security-Policy)。这个头是一组基于分号分割的有效指令的字符串。指令定义了可安全通信的源列表。以下指令用于各种资源类型例如图片,xhr,样式,脚本:
child-src 控制嵌套的浏览上下文和工作执行
connect-src 控制网络活动例如XMLHttpRequest::Send
font-src 控制字体加载
form-action 控制表单提交
frame-ancestors 控制嵌入的iframes,对象,程序等
img-src 控制图片加载
media-src 控制视频和音频源
object-src 控制插件
script-src 控制执行脚本
style-src 控制CSS源
上述列表不完全。所以个人建议阅读更独特性的完整规范。例如:可以配置一个端点用于报告违犯CSP规则。
每个指令我列出可安全使用的一个或多个源。可用值为:
'none'-源置空,不匹配任何内容
'self'-与当前来源相同,但不包含子域
'unsafe-inline'-允许内联JS和CSS例如内联的<script>,<style>
'unsafe-eval'-允许文本到JS的机制例如eval
任何有效的host表达式(通配符支持)-例如http://60dev.com
关键字和host表达式可联合使用。例如,script-src 'self' https://google-analytics.com 意味着在此页面上从当前域名或 https://google-analytics.com 加载的脚本允许执行。
本文的其余部分默认内容安全策略生成合适的一种形式在各种软件中使用,例如web服务器或框架。使用csp-manager(用于教育用途)工具生成配置  
npm install csp-manager -g
csp-manager init csp-manager
generate nginx

NGINX使用CSP
在NGINX位置添加以下代码:
add_header Content-Security-Policy "base-uri 'self'; connect-src 'self'; default-src 'self'; font-src 'self'; frame-ancestors 'self'; frame-src 'self'; img-src 'self'; manifest-src 'self'; media-src 'self'; object-src 'self'; script-src 'self'; style-src 'self'"add_header X-Content-Security-Policy "base-uri 'self'; connect-src 'self'; default-src 'self'; font-src 'self'; frame-ancestors 'self'; frame-src 'self'; img-src 'self'; manifest-src 'self'; media-src 'self'; object-src 'self'; script-src 'self'; style-src 'self'" 

Browsersync使用CSP
browser sync配置配件(gulp)添加以下代码:
browserSync.init({server: {baseDir:"./",middleware:function(req, res, next) {res.setHeader("Content-Security-Policy","base-uri 'self'; connect-src 'self'; default-src 'self'; font-src 'self'; frame-ancestors 'self'; frame-src 'self'; img-src 'self'; manifest-src 'self'; media-src 'self'; object-src 'self'; script-src 'self'; style-src 'self'");res.setHeader("X-Content-Security-Policy","base-uri 'self'; connect-src 'self'; default-src 'self'; font-src 'self'; frame-ancestors 'self'; frame-src 'self'; img-src 'self'; manifest-src 'self'; media-src 'self'; object-src 'self'; script-src 'self'; style-src 'self'");next();}}});

Ember-CLI使用CSP
config/environment.js添加以下代码:
ENV.contentSecurityPolicy ={"base-uri": "'self'","connect-src": "'self'","default-src": "'self'","font-src": "'self'","frame-ancestors": "'self'","frame-src": "'self'","img-src": "'self'","manifest-src": "'self'","media-src": "'self'","object-src": "'self'","script-src": "'self'","style-src": "'self'"};

Apache使用CSP
Apache配置文件添加以下代码:
<IfModule mod_headers.c>Header set Content-Security-Policy "base-uri 'self'; connect-src 'self'; default-src 'self'; font-src 'self'; frame-ancestors 'self'; frame-src 'self'; img-src 'self'; manifest-src 'self'; media-src 'self'; object-src 'self'; script-src 'self'; style-src 'self'"Header set X-Content-Security-Policy "base-uri 'self'; connect-src 'self'; default-src 'self'; font-src 'self'; frame-ancestors 'self'; frame-src 'self'; img-src 'self'; manifest-src 'self'; media-src 'self'; object-src 'self'; script-src 'self'; style-src 'self'"
</IfModule> 

NodeJS使用CSP
KOAJS
KOAJS中间件添加以下代码:
this.set("Content-Security","base-uri 'self'; connect-src 'self'; default-src 'self'; font-src 'self'; frame-ancestors 'self'; frame-src 'self'; img-src 'self'; manifest-src 'self'; media-src 'self'; object-src 'self'; script-src 'self'; style-src 'self'");
this.set("X-Content-Security-Policy","base-uri 'self'; connect-src 'self'; default-src 'self'; font-src 'self'; frame-ancestors 'self'; frame-src 'self'; img-src 'self'; manifest-src 'self'; media-src 'self'; object-src 'self'; script-src 'self'; style-src 'self'"); 

KOAJS基于lusca
KOAJS应用添加以下代码:
app.use(lusca({csp: {"base-uri": "'self'","connect-src": "'self'","default-src": "'self'","font-src": "'self'","frame-ancestors": "'self'","frame-src": "'self'","img-src": "'self'","manifest-src": "'self'","media-src": "'self'","object-src": "'self'","script-src": "'self'","style-src": "'self'"},
}));

检查CSP
使用Firefox检查CSP对当前页面是否生效。按以下操作,打开目标网页并按 Shift + F2 打开开发者工具。输入 security csp,按 Enter 你会看到如下内容:
其他浏览器你需要检查响应头以确信当前的CSP。

转载于:https://www.cnblogs.com/imathliu/p/5195266.html

【译】使用内容安全策略(CSP)加固应用相关推荐

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

    内容安全策略(CSP),其核心思想十分简单:网站通过发送一个 CSP 头部,来告诉浏览器什么是被授权执行的与什么是需要被禁止的.其被誉为专门为解决XSS攻击而生的神器. 1.前言 内容安全策略 (CS ...

  2. 浏览器安全策略说之内容安全策略CSP

    天融信阿尔法实验室 · 2014/04/17 14:50 目录 0x00 前言 0x01 CSP概念 0x02 CSP发展时间轴 0x03 CSP语法 0x04 CSP默认特性 0x05 CSP例子 ...

  3. 如何创建内容安全策略(CSP 标头)

    介绍 内容安全策略 (CSP) 是浏览器在加载您的网站时遵循的一组说明,作为您网站的 HTTP 响应标头的一部分提供. 这是一个广泛支持的安全标准,可以通过微调允许浏览器在您的网站上加载的资源来帮助您 ...

  4. matlab csp详解,内容安全策略(CSP)详解

    1.背景 1.1.同源策略 网站的安全模式源于"同源策略",web浏览器允许第一个web页面中的脚本访问页面中的数据,但前提是两个web页面具有相同的源.此策略防止一个页面的恶意脚 ...

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

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

  6. nightwatch测试_使用Nightwatch和Express测试内容安全策略标头

    nightwatch测试 My team has recently started implementing CSP on our website. As we started building ou ...

  7. 内容安全策略 Content-Security-Policy

    一.作用: 1.限制资源获取:限制网页当中一系列的资源获取的情况,从哪里获取,请求发到哪个地方 限制方式: default-src限制全局的和链接有关的作用范围 根据资源类型(connect-src. ...

  8. 一步一步学习DVWA渗透测试(CSP Bypass绕过内容安全策略)-第十二次课

    小伙伴们,今天我们继续学习. Content-Security-Policy是指HTTP返回报文头中的标签,浏览器会根据标签中的内容,判断哪些资源可以加载或执行.翻译为中文就是绕过内容安全策略.是为了 ...

  9. CSP(内容安全策略)防运营商劫持

    (一)前言 CSP英文全称Content Security Policy,中文意思是 内容安全策略. CSP以白名单的机制对网站加载或执行的资源起作用,在网页中,这样的策略通过 HTTP 头信息或者 ...

最新文章

  1. Map再整理,从底层源码探究HashMap
  2. 父进程等待子进程结束
  3. mysql内连接简写_技术分享 | MySQL 的 join_buffer_size 在内连接上的应用
  4. android fastjson漏洞_【漏洞预警】Fastjson 远程代码执行漏洞(暂无PoC)
  5. 设计海量key-value数据的存储查询模块
  6. Mac终端shell类型bash和zsh切换
  7. 修改linux绑定的域名,手工修改linux系统下DA面板绑定的域名
  8. C++ class中的静态(static)成员
  9. 华为机试——字串的连接最长路径查找
  10. 注册Nocos配置中心失败:Could not resolve placeholder ‘config.info‘ in value “${config.info}
  11. c++设置一个二维字符组初值_6.8 C++字符数组
  12. LeetCode 87. 扰乱字符串(递归)
  13. Centos7:dubbo监控中心安装,配置和使用
  14. 05Struts2表单
  15. 拓端tecdat|Excel中计算票面利率Coupon Rate
  16. python输入一个序列_Python序列合并,python
  17. 联想笔记本电脑换掉原装系统后无法进BIOS不完美解决办法
  18. 绘画技巧:怎样才能画好拟人化兽人?
  19. 三星 c5 html,三星GALAXY C5/C7参数配置介绍 均支持Samsung Pay
  20. Go语言实现Onvif客户端:9、预置点删改查及跳转

热门文章

  1. 三级信息安全技术真题知识点总结-第二套
  2. 使用MCP2515和TJA1050构成CAN节点通信
  3. pdf怎么压缩,并保持清晰?
  4. 前端框架iviewui使用示例之菜单+多Tab页布局
  5. YAML标准(什么是yaml)
  6. 使用Qt Designer和Qss设计Qt界面
  7. 2020年,校招U3D笔试题(部分附答案)
  8. 基于C#.NET的高端智能化网络爬虫(二)(攻破携程网)
  9. 多目标优化算法:多目标金豺优化算法MOGJO(提供MATLAB代码)
  10. matlab2017中工具箱,【2017年整理】matlab工具箱介绍.ppt