内容安全策略(CSP)

2024-06-07 11:12
文章标签 csp 内容 安全策略

本文主要是介绍内容安全策略(CSP),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        内容安全策略(Content Security Policy,CSP)是一种网络浏览器技术,用于减少或者消除某类型的网站漏洞,如跨站脚本(XSS)攻击等。CSP通过定义哪些资源可以被用户代理(如浏览器)加载和执行,从而提高网站的安全性。
        CSP是通过在网页的HTTP响应头中设置“Content-Security-Policy”来实施的。这个HTTP响应头指定了一个策略,明确了哪些内容可以被加载以及它们可以被从哪些域加载。

 一、常见CSP示例

 1、所有内容均来自站点的同一个源(不包括其子域名)

Content-Security-Policy: default-src 'self'

2、允许内容来自信任的域名及其子域名(域名不必须与 CSP 设置所在的域名相同)

Content-Security-Policy: default-src 'self' *.trusted.com

3、允许网页应用的用户在他们自己的内容中包含来自任何源的图片,但是限制音频或视频需从信任的资源提供者,所有脚本必须从特定主机服务器获取可信的代码

Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com

4、确保网站的所有内容都要通过 SSL 方式获取,以避免攻击者窃听用户发出的请求

Content-Security-Policy: default-src https://onlinebanking.jumbobank.com

5、内容安全策略指令
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy

 二、使用Content-Security-Policy-Report-Only对策略进行测试

        CSP 可以部署为仅报告(report-only)模式。在此模式下,CSP 策略不是强制性的,任何违规行为将会报告给一个指定的 URI 地址。(仅报告标头可以用来测试对策略未来的修订,如果 Content-Security-Policy-Report-Only 标头和 Content-Security-Policy 同时出现在一个响应中,两个策略均有效)

1、使用 report-uri (已废弃,但是大多数浏览器支持)将报告发送到指定url

Content-Security-Policy-Report-Only "default-src https:; report-uri /report-endpoint";

2、使用 report-to (目前有的浏览器不支持)将报告发送到指定url

Report-To "{ "group": "default","max_age": 10886400,"endpoints": [{ "url": "https://example.com/report-endpoint" }] }";
Content-Security-Policy "default-src https:; report-to default";

 三、执行CSP策略并将违规内容发送到指定服务器

 1、制定CSP策略,指定report-uri用以启用报告,策略如下:

Content-Security-Policy: "default-src 'none'; style-src cdn.example.com; report-uri http://www.hb.com:8088/report-endpoint"; //该策略禁止任何资源的加载,除了来自 cdn.example.com 的样式表。

2、编辑网站页面signup.html,将以下页面置于 http://example.com/signup.html

<!doctype html>
<html lang="en-US"><head><meta charset="UTF-8" /><title>Sign Up</title><link rel="stylesheet" href="css/style.css" /></head><body>Here be content.</body>
</html>

3、访问http://example.com/signup.html,由于CSP仅允许加载自 cdn.example.com 的样式表,而该页面企图从自己的源(http://example.com)加载。页面被访问时,一个兼容 CSP 的浏览器将以 POST 请求的形式发送违规报告到 http://example.com/_/csp-reports,内容如下

{"csp-report": {"blocked-uri": "http://example.com/css/style.css", //被 CSP 阻止的资源 URI。如果被阻止的 URI 来自不同的源而非 document-uri,那么被阻止的资源 URI 会被删减,仅保留协议、主机和端口号。"disposition": "report",//根据 Content-Security-Policy-Report-Only 和 Content-Security-Policy 标头使用情况的不同,值为 "enforce" 或 "report"。"document-uri": "http://example.com/signup.html",//发生违规的文档的 URI"effective-directive": "style-src-elem",//导致违规行为发生的指令。一些浏览器可能提供不同的值,例如 Chrome 提供 style-src-elem 或 style-src-attr,即使实际执行的指令是 style-src。"original-policy": "default-src 'none'; style-src cdn.example.com; report-to /_/csp-reports",//由 Content-Security-Policy HTTP 标头指定的原始策略值。"referrer": "",//违规发生处的文档引用(地址)。"status-code": 200,//全局对象被实例化的资源的 HTTP 状态代码。"violated-directive": "style-src-elem"//导致违反策略的指令。violated-directive 是 effective-directive 字段的历史名称,并包含相同的值。}
}

 四、nginx配置CSP策略,并接受违规报告

1、使用python配置接受报告的服务

pip3 install flask
vim report-endpoint.py
from flask import Flask, request
import jsonapp = Flask(__name__)@app.route('/report-endpoint', methods=['POST'])
def report_endpoint():report = request.get_json()#print(json.dumps(report, indent=4))print(request.data)return '', 200if __name__ == '__main__':app.run(host='0.0.0.0', port=8088)

2、修改nginx.conf 配置文件,在server中下添加:

add_header Content-Security-Policy "default-src 'none'; style-src cdn.example.com; report-uri http://www.hb.com:8088/report-endpoint";

3、重启 nginx 服务

systemctl restart nginx

五、使用<meta> 元素来配置CSP策略

据内容安全策略(CSP)的规定,某些CSP指令,包括report-uri,不能通过<meta>元素来设置在signup.html添加:

<metahttp-equiv="Content-Security-Policy"content="default-src 'none'; style-src cdn.example.com;" />

这篇关于内容安全策略(CSP)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039013

相关文章

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18

【python计算机视觉编程——8.图像内容分类】

python计算机视觉编程——8.图像内容分类 8.图像内容分类8.1 K邻近分类法(KNN)8.1.1 一个简单的二维示例8.1.2 用稠密SIFT作为图像特征8.1.3 图像分类:手势识别 8.2贝叶斯分类器用PCA降维 8.3 支持向量机8.3.2 再论手势识别 8.4 光学字符识别8.4.2 选取特征8.4.3 多类支持向量机8.4.4 提取单元格并识别字符8.4.5 图像校正

CSP-J基础之数学基础 初等数论 一篇搞懂(二)

文章目录 前言算术基本定理简介什么是质数?举个简单例子:重要的结论:算术基本定理公式解释:举例: 算术基本定理的求法如何找出质因数:举个简单的例子: 重要的步骤:C++实现 同余举个例子:同余的性质简介1. 同余的自反性2. 同余的对称性3. 同余的传递性4. 同余的加法性质5. 同余的乘法性质 推论 总结 前言 在计算机科学和数学中,初等数论是一个重要的基础领域,涉及到整数

JS中【记忆函数】内容详解与应用

在 JavaScript 中,记忆函数(Memoization)是一种优化技术,旨在通过存储函数的调用结果,避免重复计算以提高性能。它非常适用于纯函数(同样的输入总是产生同样的输出),特别是在需要大量重复计算的场景中。为了彻底理解 JavaScript 中的记忆函数,本文将从其原理、实现方式、应用场景及优化方法等多个方面详细讨论。 一、记忆函数的基本原理 记忆化是一种缓存策略,主要用于函数式编