第26节课:内容安全策略(CSP)—构建安全网页的防御盾
目录
- CSP基础
- CSP的作用
- CSP的主要属性
- 配置CSP
- 通过响应头配置CSP
- 通过HTML `<meta>`标签配置CSP
- 属性设置详解
- 指定多个来源
- 配置示例
- 说明
- 常见错误配置
- 实践:CSP与XSS防护
- 示例1:防止内联脚本和样式
- 说明
- 示例2:限制图片来源
- 说明
- 限制与注意事项
- 结语
在现代Web开发中,内容安全策略(CSP)是一种强大的工具,用于帮助开发者防止多种安全漏洞,尤其是跨站脚本(XSS)攻击。本节课将详细介绍CSP的基础知识、配置方法,以及如何利用CSP来提高网页的安全性。
CSP基础
内容安全策略(CSP)是一种安全标准,旨在减少和报告内容注入漏洞的影响。它通过指定哪些资源可以被加载,从而限制恶意内容的执行。CSP的主要目标是防止跨站脚本(XSS)攻击,但也能防范其他类型的攻击,如数据注入攻击和安全漏洞。
CSP的作用
CSP通过定义一个安全策略,告诉浏览器哪些资源是可信的,哪些是不可信的。这个策略通常通过HTTP响应头发送,例如:
http复制
Content-Security-Policy: default-src 'self'; script-src 'self' https://trustedscripts.com
CSP的主要属性
CSP包含多个属性,用于控制不同类型的内容加载。以下是一些常用的CSP属性:
- default-src:默认策略,适用于所有类型的内容,如果其他属性未指定,则使用此策略。
- script-src:定义允许加载的脚本来源。
- style-src:定义允许加载的样式来源。
- img-src:定义允许加载的图像来源。
- connect-src:定义允许加载的网络请求来源。
- font-src:定义允许加载的字体来源。
- frame-src:定义允许加载的框架来源。
- object-src:定义允许加载的对象来源。
- report-uri:指定违反CSP策略时的报告网址。
配置CSP
CSP可以通过HTTP响应头或HTML <meta>
标签进行配置。
通过响应头配置CSP
在Web服务器的配置文件中添加CSP响应头是最常见的方法。例如,在Nginx配置文件中,可以添加以下内容:
nginx复制
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trustedscripts.com";
通过HTML <meta>
标签配置CSP
如果无法通过服务器配置CSP,也可以使用HTML <meta>
标签来定义策略:
HTML复制
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://trustedscripts.com">
属性设置详解
- ‘self’:允许来自当前域的资源。
- ‘none’:不允许任何资源。
- ‘unsafe-inline’:允许内联脚本和样式。
- ‘unsafe-eval’:允许通过
eval
执行的代码。 - **https://trustedscripts.com**:允许来自指定域的资源。
指定多个来源
可以指定多个来源,用空格分隔:
http复制
script-src 'self' https://trustedscripts.com https://anothertrusted.com
配置示例
以下是一个典型的CSP配置示例:
http复制
Content-Security-Policy: default-src 'self'; script-src 'self' https://trustedscripts.com; style-src 'self' https://trustedstyles.com; img-src 'self' https://trustedimages.com
说明
- default-src ‘self’:所有资源默认只能来自当前域。
- **script-src ‘self’ https://trustedscripts.com**:脚本只能来自当前域和
https://trustedscripts.com
。 - **style-src ‘self’ https://trustedstyles.com**:样式只能来自当前域和
https://trustedstyles.com
。 - **img-src ‘self’ https://trustedimages.com**:图像只能来自当前域和
https://trustedimages.com
。
常见错误配置
在配置CSP时,需避免以下常见的错误:
- 未设置’script-src’:如果未设置
script-src
,则会使用default-src
的值。如果default-src
为'self'
,则所有脚本都将被阻止加载,包括内联脚本。 - 允许’unsafe-inline’:应尽量避免使用
'unsafe-inline'
,因为它允许内联脚本和样式,增加了XSS攻击的风险。 - 过度限制:避免过度限制资源,否则可能导致合法资源无法加载。
实践:CSP与XSS防护
CSP是防止XSS攻击的有效工具。以下是一个示例,展示如何使用CSP来防护XSS攻击。
示例1:防止内联脚本和样式
假设我们有一个网页,需要防止内联脚本和样式。可以配置CSP如下:
http复制
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'
说明
此配置将禁止所有内联脚本和样式,只允许来自当前域的外部脚本和样式。
示例2:限制图片来源
如果我们希望限制图片只能来自当前域和信任的图片服务,可以配置CSP如下:
http复制
Content-Security-Policy: default-src 'self'; img-src 'self' https://trustedimages.com
说明
此配置将限制图片只能来自当前域和https://trustedimages.com
,从而防止恶意图片的加载。
限制与注意事项
- 性能影响:CSP可能会增加服务器的负担,特别是在高并发情况下。
- 兼容性:部分旧版浏览器可能不支持CSP,需根据实际情况选择是否使用。
- 维护成本:CSP需要定期检查和更新策略,确保安全性和功能性。
通过以上内容,我们可以看出,合理配置CSP能够有效提升网页的安全性,防止多种类型的安全攻击。实践时,需细心配置,避免过度限制或宽松限制,从而在保障安全性的前提下确保网页正常运行。
结语
内容安全策略(CSP)是现代Web开发中不可或缺的一部分。通过本文的学习,你应该对CSP的基础知识、配置方法,以及如何利用CSP来防护XSS攻击有了深入的了解。在开发过程中,合理配置CSP,能够有效提升网页的安全性,防止恶意攻击。继续深入学习CSP的高级特性和最佳实践,你将能够构建出更加安全和可靠的Web应用。
相关文章:
第26节课:内容安全策略(CSP)—构建安全网页的防御盾
目录 CSP基础CSP的作用CSP的主要属性 配置CSP通过响应头配置CSP通过HTML <meta>标签配置CSP属性设置详解指定多个来源 配置示例说明 常见错误配置实践:CSP与XSS防护示例1:防止内联脚本和样式说明示例2:限制图片来源说明 限制与注意事项…...
【大坑】使用element-ui弹窗$confirm自动弹出
插入element-ui的弹窗后页面一刷新自动弹出,事件绑定、调用位置(生命周期)均没有问题,通过不断注释组件发现是main.js全局引入导致的问题。如果需要在某些组件中使用三方弹窗,可以按需引入,而不是全局注册 …...
Spring的AOP思想中事物管理注意点
我们以事务管理实现AOP思想 通过在Service层加入事务管理,因为Service层可能使用多个DAO(多条SQL语句) 要保证这些SQL要么同时成功,要么同时失败,例如:学生Serivce:删除学生的时候,还需要删除学生关联信息(选课信息) 只有都删除成功才提交,如果有一条执行失败…...
PHP Mail:高效邮件发送解决方案详解
PHP Mail:高效邮件发送解决方案详解 引言 在互联网时代,邮件作为最常用的沟通方式之一,已经成为企业和个人不可或缺的通讯工具。PHP作为一种流行的服务器端脚本语言,在邮件发送方面具有天然的优势。本文将详细介绍PHP Mail&…...
python recv的概念和使用案例
recv 是网络编程中用于从套接字接收数据的核心函数,常见于 TCP/UDP 通信。以下是其概念、用法和案例详解: 概念 作用:从已连接(TCP)或已绑定(UDP)的套接字接收数据。参数: bufsize:…...
安卓(android)读取手机通讯录【Android移动开发基础案例教程(第2版)黑马程序员】
一、实验目的(如果代码有错漏,可在代码地址查看) 1.熟悉内容提供者(Content Provider)的概念和作用。 2.掌握内容提供者的创建和使用方法。 4.掌握内容URI的结构和用途。 二、实验条件 1.熟悉内容提供者的工作原理。 2.掌握内容提供者访问其…...
Java知识速记 == 与equals
Java知识速记 与equals 1. 操作符概述 操作符用于比较基本数据类型的值,或者比较引用类型的对象是否指向同一内存地址。对于基本数据类型,例如int、float等,会比较其值;但对于对象,只会比较两个对象的引用ÿ…...
web集群
项目名称 基于keepalivednginx构建一个高可用、高性能的web集群 项目架构图 项目描述 基本描述 构建一个基于 Nginx 的 7 层负载均衡的 Web 集群系统,模拟企业级业务环境,实现高并发和高可用性的 Web 集群。通过压力测试验证集群性能,找…...
HTMLCSS :下雪了
这段代码创建了一个动态的雪花飘落加载动画,通过 CSS 技术实现了雪花的下落和消失效果,为页面添加了视觉吸引力和动态感。 大家复制代码时,可能会因格式转换出现错乱,导致样式失效。建议先少量复制代码进行测试,若未能…...
Kafka SSL(TLS)安全协议
文章目录 Kafka SSL(TLS)安全协议1. Kafka SSL 的作用1.1 数据加密1.2 身份认证1.3 数据完整性1.4 防止中间人攻击1.5 确保安全的分布式环境1.6 防止拒绝服务(DoS)攻击 2. Kafka SSL 配置步骤(1)创建 SSL 证…...
WebForms SortedList 深度解析
WebForms SortedList 深度解析 引言 在Web开发领域,对于数据结构的理解与应用至关重要。其中,SortedList类在WebForms中是一个常用的数据结构,它能够帮助开发者高效地管理有序数据集合。本文将深入解析SortedList类在WebForms中的应用,包括其基本概念、常用方法、性能特点…...
项目集成Spring Security认证部分
一、需求分析 在本项目中,使用了Spring Security框架来进行认证和授权管理。由于是前后端分离的项目,所有认证的请求需要通过Token来验证身份,系统中包括了用户登录、角色授权以及资源访问控制等功能。 系统中的资源控制: 白名单…...
【PyTorch】7.自动微分模块:开启神经网络 “进化之门” 的魔法钥匙
目录 1. 梯度基本计算 2. 控制梯度计算 3. 梯度计算注意 4. 小节 个人主页:Icomi 专栏地址:PyTorch入门 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活…...
【算法】回溯算法专题① ——子集型回溯 python
目录 引入变形实战演练总结 引入 子集 https://leetcode.cn/problems/subsets/description/ 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 …...
Nginx 安装配置指南
Nginx 安装配置指南 引言 Nginx 是一款高性能的 HTTP 和反向代理服务器,同时也可以作为 IMAP/POP3/SMTP 代理服务器。由于其稳定性、丰富的功能集以及低资源消耗而被广泛应用于各种场景。本文将为您详细介绍 Nginx 的安装与配置过程。 系统要求 在安装 Nginx 之…...
深度学习 DAY3:NLP发展史
NLP发展史 NLP发展脉络简要梳理如下: (远古模型,上图没有但也可以算NLP) 1940 - BOW(无序统计模型) 1950 - n-gram(基于词序的模型) (近代模型) 2001 - Neural language models&am…...
Spring Data JPA 实战:构建高性能数据访问层
1 简介 1.1 Spring Data JPA 概述 1.1.1 什么是 Spring Data JPA? Spring Data JPA 是 Spring Data 项目的一部分,旨在简化对基于 JPA 的数据库访问操作。它通过提供一致的编程模型和接口,使得开发者可以更轻松地与关系型数据库进行交互,同时减少了样板代码的编写。Spri…...
全程Kali linux---CTFshow misc入门(25-37)
第二十五题: 提示:flag在图片下面。 直接检查CRC,检测到错误,就直接暴力破解。 暴力破解CRC的python代码。 import binascii import struct def brute_force_ihdr_crc(filename): # 读取文件二进制数据 with open(filen…...
【Elasticsearch】match_bool_prefix 查询 vs match_phrase_prefix 查询
Match Bool Prefix Query vs. Match Phrase Prefix Query 在 Elasticsearch 中,match_bool_prefix 查询和 match_phrase_prefix 查询虽然都支持前缀匹配,但它们的行为和用途有所不同。以下是它们之间的主要区别: 1. match_bool_prefix 查询…...
被裁与人生的意义--春节随想
还有两个月就要被迫离开工作了十多年的公司了,不过有幸安安稳稳的过了一个春节,很知足! 我是最后一批要离开的,一百多号同事都没“活到”蛇年。看着一批批仁人志士被“秋后斩首”,马上轮到我们十来个,个中滋味很难言清…...
DNS缓存详解(DNS Cache Detailed Explanation)
DNS缓存详解 清空DNS缓存可以让网页访问更快捷。本文将从什么是DNS缓存、为什么清空DNS缓存、如何清空DNS缓存、清空DNS缓存存在的问题四个方面详细阐述DNS缓存清空的相关知识。 一、什么是DNS缓存 1、DNS缓存的定义: DNS缓存是域名系统服务在遇到DNS查询时自动…...
深度学习之“线性代数”
线性代数在深度学习中是解决多维数学对象计算问题的核心工具。这些数学对象包括标量、向量、矩阵和张量,借助它们可以高效地对数据进行操作和建模。以下将详细介绍这些数学对象及其在深度学习中的典型用途。 数学对象概述 标量 标量是最简单的数学对象࿰…...
【论文阅读】RAG-Reward: Optimizing RAG with Reward Modeling and RLHF
研究背景 研究问题:这篇文章要解决的问题是如何优化检索增强生成(RAG)系统,特别是通过奖励建模和人类反馈强化学习(RLHF)来提高大型语言模型(LLMs)在RAG任务中的效果。研究难点&…...
新一代搜索引擎,是 ES 的15倍?
Manticore Search介绍 Manticore Search 是一个使用 C 开发的高性能搜索引擎,创建于 2017 年,其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx,显着改进了它的功能,修复了数百个错误,几乎完全重写了代码…...
鸿蒙物流项目之实现广告页
目录: 1、广告页布局2、倒计时的实现 1、广告页布局 鸿蒙官方有提供实现广告页的方法,这里我们不使用,使用自定义广告页。 2、倒计时的实现 在页面加载时实现倒计时功能,在页面倒计时为0时跳转其他页面后销毁页面后同时也要销毁定…...
自制虚拟机(C/C++)(二、分析引导扇区,虚拟机读二进制文件img软盘)
先修复上一次的bug,添加新指令,并增加图形界面 #include <graphics.h> #include <conio.h> #include <windows.h> #include <commdlg.h> #include <iostream> #include <fstream> #include <sstream> #inclu…...
S4 HANA给科目分配允许记账的税码
本文主要介绍在S4 HANA OP中给科目分配允许记账的税码相关设置。具体请参照如下内容: 1. 给科目分配允许记账的税码 以上配置定义了总账科目可以使用什么税码进行记账。通常在科目主数据中会明确总账科目的“Tax Category”来请明确总账科目可以使用什么类型的税码…...
【LeetCode 刷题】回溯算法-组合问题
此博客为《代码随想录》二叉树章节的学习笔记,主要内容为回溯算法组合问题相关的题目解析。 文章目录 77. 组合216.组合总和III17.电话号码的字母组合39. 组合总和40. 组合总和 II 77. 组合 题目链接 class Solution:def combinationSum3(self, k: int, n: int) …...
Automatic Prefix Caching
APC技术,遇到新prompt和老prompt前缀完全相等的,则复用老prompt的KV cache,避免重新计算。 VLLM代码实例: # set enable_prefix_cachingTrue to enable APC llm LLM(modellmsys/longchat-13b-16k,enable_prefix_cachingTrue ) 应…...
DDD - 领域事件_解耦微服务的关键
文章目录 Pre领域事件的核心概念领域事件的作用领域事件的识别领域事件的技术实现领域事件的运行机制案例领域事件驱动的优势 Pre DDD - 微服务设计与领域驱动设计实战(中)_ 解决微服务拆分难题 EDA - Spring Boot构建基于事件驱动的消息系统 领域事件的核心概念 领域事件&a…...
吴晓波 历代经济变革得失@简明“中国经济史” - 读书笔记
目录 《历代经济变革得失》读书笔记一、核心观点二、主要内容(一)导论(二)春秋战国时期(三)汉代(四)北宋(五)明清时期(六)近现代&…...
Ubuntu下的Doxygen+VScode实现C/C++接口文档自动生成
Ubuntu下的DoxygenVScode实现C/C接口文档自动生成 Chapter1 Ubuntu下的DoxygenVScode实现C/C接口文档自动生成1、 Doxygen简介1. 安装Doxygen1)方法一:2)方法二:2. doxygen注释自动生成插件3. doxygen注释基本语法4. doxygen的生成…...
论文阅读:Realistic Noise Synthesis with Diffusion Models
这篇文章是 2025 AAAI 的一篇工作,主要介绍的是用扩散模型实现对真实噪声的仿真模拟 Abstract 深度去噪模型需要大量来自现实世界的训练数据,而获取这些数据颇具挑战性。当前的噪声合成技术难以准确模拟复杂的噪声分布。我们提出一种新颖的逼真噪声合成…...
【Linux系统】计算机世界的基石:冯诺依曼架构与操作系统设计
文章目录 一.冯诺依曼体系结构1.1 为什么体系结构中要存在内存?1.2 冯诺依曼瓶颈 二.操作系统2.1 设计目的2.2 系统调用与库函数 一.冯诺依曼体系结构 冯诺依曼体系结构(Von Neumann Architecture)是计算机的基本设计理念之一,由…...
p1044 栈
两种递推细节不同 1,将1和n在序列末尾的情况单独放出来处理,因为dp[0]0; 2,将所有情况统一处理,这种情况就要要求dp[1]1; 这里的n在解题中可以看做是元素数量 思路是,根据出栈最后一个元素,统计它前面的元素数量的输出序列数和…...
x86-64数据传输指令
关于汇编语言一些基础概念的更详细的介绍,可移步MIPS指令集(一)基本操作_mips指令 sw-CSDN博客 该指令集中一个字2字节。 该架构有16个64位寄存器,名字都以%r开头,每个寄存器的最低位字节,低1~2位字节&…...
C++11新特性之lambda表达式
1.介绍 C11引入了lambda表达式。lambda表达式提供一种简洁的方式来定义匿名函数对象,使得在需要临时定义一个函数时非常方便。 2.lambda表达式用法 lambda表达式的基本用法为: [捕获列表](参数列表)->返回类型 { 函数体 …...
51单片机密码锁代码
基于液晶屏外设写的. main.c #include <REGX52.H> #include "LCD1602.h" #include "MatrixKey.h" #include "Sleep.h" long password1234; long resNum0; int status0,res0,k1500; long birth2005; void main(){LCD_Init();LCD_ShowStr…...
如何使用C#的using语句释放资源?什么是IDisposable接口?与垃圾回收有什么关系?
在 C# 中,using语句用于自动释放实现了IDisposable接口的对象所占用的非托管资源,如文件句柄、数据库连接、图形句柄等。其使用方式如下: 基础用法 声明并初始化资源对象:在using关键字后的括号内声明并初始化一个实现了IDisposable接口的对象。使用资源:在using语句块内…...
【Unity3D】实现横版2D游戏——单向平台(简易版)
目录 问题 项目Demo直接使用免费资源:Hero Knight - Pixel Art (Asset Store搜索) 打开Demo场景,进行如下修改,注意Tag是自定义标签SingleDirCollider using System.Collections; using System.Collections.Generic;…...
BW AO/工作簿权限配置
场景: 按事业部配置工作簿权限; 1、创建用户 事务码:SU01,用户主数据的维护,可以创建、修改、删除、锁定、解锁、修改密码等 用户设置详情页 2、创建权限角色 用户的权限菜单是通过权限角色分配来实现的 2.1、自定…...
TensorFlow 示例摄氏度到华氏度的转换(一)
TensorFlow 实现神经网络模型来进行摄氏度到华氏度的转换,可以将其作为一个回归问题来处理。我们可以通过神经网络来拟合这个简单的转换公式。 1. 数据准备与预处理 2. 构建模型 3. 编译模型 4. 训练模型 5. 评估模型 6. 模型应用与预测 7. 保存与加载模型 …...
一文讲解JVM中的G1垃圾收集器
接上一篇博文,这篇博文讲下JVM中的G1垃圾收集器 G1在JDK1.7时引入,在JDK9时取代了CMS成为默认的垃圾收集器; G1把Java堆划分为多个大小相等的独立区域Region,每个区域都可以扮演新生代(Eden和Survivor)或老…...
图书管理系统 Axios 源码__获取图书列表
目录 核心功能 源码介绍 1. 获取图书列表 技术要点 适用人群 本项目是一个基于 HTML Bootstrap JavaScript Axios 开发的图书管理系统,可用于 添加、编辑、删除和管理图书信息,适合前端开发者学习 前端交互设计、Axios 数据请求 以及 Bootstrap 样…...
mac和linux传输文件
1、使用scp命令传输 # 上传 wenqiangwq ~ % scp -pr -P 22 nginx.yaml root192.168.1.15:/tmp/ root192.168.1.15s password: nginx.yaml 100% 1736 332.4KB/s 00:00# 下载 wenqiangwq ~ % scp -pr -P 22 root192.168.1.15:/tmp/ngin…...
[CVPR 2024] AnyDoor: Zero-shot Object-level Image Customization
github.com/ali-vilab/AnyDoor.写在前面: 【论文速读】按照#论文十问#提炼出论文核心知识点,方便相关科研工作者快速掌握论文内容。过程中并不对论文相关内容进行翻译。博主认为翻译难免会损坏论文的原本含义,也鼓励诸位入门级科研人员阅读文…...
(动态规划路径基础 最小路径和)leetcode 64
视频教程 1.初始化dp数组,初始化边界 2、从[1行到n-1行][1列到m-1列]依次赋值 #include<vector> #include<algorithm> #include <iostream>using namespace std; int main() {vector<vector<int>> grid { {1,3,1},{1,5,1},{4,2,1}…...
跨组织环境下 MQTT 桥接架构的评估
论文标题 中文标题: 跨组织环境下 MQTT 桥接架构的评估 英文标题: Evaluation of MQTT Bridge Architectures in a Cross-Organizational Context 作者信息 Keila Lima, Tosin Daniel Oyetoyan, Rogardt Heldal, Wilhelm Hasselbring Western Norway …...
2025年1月22日(网络编程 udp)
系统信息: ubuntu 16.04LTS Raspberry Pi Zero 2W 系统版本: 2024-10-22-raspios-bullseye-armhf Python 版本:Python 3.9.2 已安装 pip3 支持拍摄 1080p 30 (1092*1080), 720p 60 (1280*720), 60/90 (640*480) 已安装 vim 已安装 git 学习…...
基于 STM32 的智能电梯控制系统
1. 引言 随着城市化进程的加速,高层建筑日益增多,电梯作为垂直交通工具的重要性愈发凸显。传统电梯控制系统在运行效率、安全性和智能化程度上已难以满足现代需求。智能电梯控制系统能够实时监测电梯的运行状态、乘客需求,并根据这些信息优化…...