sanitize-html 防止 XSS(跨站脚本攻击)
sanitize-html
是一个用于清理和验证 HTML 的 JavaScript 库,主要用于防止 XSS(跨站脚本攻击)。它允许你定义一套规则来决定哪些 HTML 标签和属性是可以被信任的,从而确保用户输入的内容不会包含潜在的恶意代码。
主要功能
- HTML 清理:移除不安全的标签和属性。
- 自定义配置:可以根据需求配置允许的标签、属性等。
- XSS 防护:有效防止跨站脚本攻击。
使用场景
- 在接收用户输入的富文本内容时,确保内容的安全性。
- 在展示第三方提供的 HTML 内容时,防止恶意代码注入。
安装
可以通过 npm 安装 sanitize-html
:
npm install sanitize-html
基本用法
const sanitizeHtml = require('sanitize-html');const dirty = '<p><script>alert("XSS");</script>Some text</p>';
const clean = sanitizeHtml(dirty, {allowedTags: ['p', 'b', 'i', 'em', 'strong'],allowedAttributes: {},
});console.log(clean); // 输出: <p>Some text</p>
以下是一个在vue中使用的更全面的配置示例:
import sanitizeHtml from 'sanitize-html';export default {data() {return {dirtyContent: '<p><script>alert("XSS");</script>Some text</p>'};},computed: {sanitizedContent() {return sanitizeHtml(this.dirtyContent, this.sanitizeConfig);// 第一个参数是要处理的文本,第二个参数是配置项}},methods: {sanitizeConfig() {return {allowedTags: ['p', 'b', 'i', 'em', 'strong', 'a', 'img'],// 允许的 HTML 标签列表。allowedAttributes: {// 允许的 HTML 属性及其对应的标签。a: ['href', 'title'],img: ['src', 'alt']},transformTags: {// 对特定标签进行转换的函数,可以修改特定标签的属性值或结构。a: (tagName, attribs) => {if (!attribs.href.startsWith('http')) {attribs.href = 'https://example.com';}return { tagName, attribs };}},allowedStyles: { // 允许的 CSS 样式及其对应的属性,只有这些样式属性及其值会被保留。'*': { // * 代表所有标签color: [/^#[0-9a-f]{6}$/i, /^rgb\(\d{1,3},\s*\d{1,3},\s*\d{1,3}\)$/]'font-size': [/\d+px/]},p: { // 仅适用于 <p> 标签'font-weight': ['bold', 'normal']}},// allowedStyles: ['color', 'background-color', 'font-size', 'text-align', 'margin', 'padding'], //也可以 这种写法, 允许使用的 CSS 样式属性 只有这些样式属性及其值会被保留。disallowedTagsMode: 'escape', // 处理allowedTags列表中不允许的标签,方式,'escape' 这个属性将不允许的标签及其内容转义为文本形式,'remove' 这个属性会直接移除这些标签。parseStyle: true, // 是否解析 style 行内属性,设置为 true 时,style 属性将被解析并清理,并根据 allowedStyles 配置来决定哪些样式属性及其值是允许的allowProtocolRelativeUrls: false,//是否允许协议相对 URL(如 //example.com),设置为 false 时,协议相对 URL 将被移除或替换。enforceHtmlEntityEncoding: true,//是否强制编码 HTML 实体,设置为 true 时,特殊字符将被编码为 HTML 实体,例如 < 被编码为 <。allowedSchemes: ['http', 'https', 'mailto'],// 允许的 URL 方案(协议),只有这些方案的 URL 会被保留,其他方案的 URL 将被移除。allowedSchemesByTag: { // 为不同标签指定不同的允许 URL 方案。a: ['http', 'https', 'mailto'],img: ['http', 'https']},allowedSchemesAppliedToAttributes: ['href', 'src'],// 指定哪些属性需要检查 URL 方案。selfClosing: ['img', 'br', 'hr'], // 这些标签将被视为自闭合标签。exclusiveFilter: (frame) => frame.tag === 'script' || frame.tag === 'style', // 排除某些标签或属性的过滤器函数,返回 true 的标签或属性将被移除。nonTextTags: ['script', 'style'], // 这些标签的内容将被视为非文本内容,不会被清理。textFilter: (text) => text.replace(/badword/g, '****') // 文本内容的过滤器函数,可以对文本内容进行自定义处理。};}}
};
通过这些配置,你可以更精细地控制 HTML 内容的清理规则,确保应用的安全性和功能性,一般常用的就前面几个,根据自己需要进行配置,如果有不对或者不足的欢迎评论区补充。
相关文章:
sanitize-html 防止 XSS(跨站脚本攻击)
sanitize-html 是一个用于清理和验证 HTML 的 JavaScript 库,主要用于防止 XSS(跨站脚本攻击)。它允许你定义一套规则来决定哪些 HTML 标签和属性是可以被信任的,从而确保用户输入的内容不会包含潜在的恶意代码。 主要功能 HTML…...

【JavaEE】文件io
目录 文件类型 File概述 属性 构造方法 常用方法 Reader Writer InputStream OutputStream 字节流转字符流 通过Scanner读取InputStream 通过PrintWriter转换outputstream 示例 文件类型 从编程的角度看,文件类型主要就是两大类 文本(文…...

FlinkPipelineComposer 详解
FlinkPipelineComposer 详解 原文 背景 在flink-cdc 3.0中引入了pipeline机制,提供了除Datastream api/flink sql以外的一种方式定义flink 任务 通过提供一个yaml文件,描述source sink transform等主要信息 由FlinkPipelineComposer解析,…...
蓝桥杯-洛谷刷题-day2(C++)
目录 1.小写字母与大写字母的转换 2.使用string(额外开一章持续补充) i.访问字符串最后一位 3.保留N位小数输出 i.C侧 ii.C语言侧 iii.总结 4.高精度相加 i.各种数据类型转字符型 ii.三元运算符 iii.循环条件中的carry 1.小写字母与大写字母的…...
16008.行为树(五)-自定义数据指针在黑板中的传递
文章目录 1.1 背景1.2 xml文件定义1.3 代码实现1.3 执行结果1.1 背景 自定义数据结构指针,通过黑板的形式,在树的节点中进行指针的传递。 1.2 xml文件定义 xhome@ubuntu:~/opt/groot_pro$ cat unit_t1.xml<?xml version="1.0" encoding="UTF-8"?&…...

javascript Vue
DOM对象 什么是DOM DOM(Document Object Model):文档对象模型,就是Javascript将HTML文档的各个组成部分封装为对象,通过修改HTML元素的内容和样式动态改变页面。 如何获取DOM对象 获取DOM中的元素对象(Element对象/标签&…...
《揭秘观察者模式:作用与使用场景全解析》
在软件开发的世界中,设计模式就像是建筑师手中的蓝图,指导着软件系统的构建。其中,观察者模式是一种极为重要且广泛应用的设计模式。今天,我们就来深入探讨一下观察者模式的作用和使用场景。 一、观察者模式是什么? …...

【QT常用技术讲解】优化网络链接不上导致qt、qml界面卡顿的问题
前言 qt、qml项目经常会涉及访问MySQL数据库、网络服务器,并且界面打开时的初始化过程就会涉及到链接Mysql、网络服务器获取数据,如果网络不通,卡个几十秒,会让用户觉得非常的不爽,本文从技术调研的角度讲解解决此类问…...
下划线命名json数组转java对象
/*** 将驼峰式命名的字符串转换为下划线方式* @param camelCase* @return*/ private static String toUnderlineCase(String camelCase) {return StrUtil.toUnderlineCase(camelCase); }/*** 下划线-赋值给-驼峰* @param source 源数据* @param target 目标数据*/ public stati…...

实测运行容器化Nginx服务器
文章目录 前言一、拉取Nginx镜像二、创建挂载目录三、运行容器化Nginx服务器四、访问网页测试 总结 前言 运行容器化Nginx服务器,首先确保正确安装docker,并且已启动运行,具体安装docker方法见笔者前面的博文《OpenEuler 下 Docker 安装、配…...

显示器接口种类 | 附图片
显示器接口类型主要包括VGA、DVI、HDMI、DP和USB Type-C等。 VGA、DVI、HDMI、DP和USB Type-C 1. 观察 VGA接口:15针 DP接口:在DP接口旁,都有一个“D”型的标志。 电脑主机:DP(D) 显示器:VGA(15针) Ref https://cloud.tenc…...

C++初阶——list
一、什么是list list是一个可以在序列的任意位置进行插入和删除的容器,并且可以进行双向迭代。list的底层是一个双向链表,双向链表可以将它们包含的每个元素存储在不同且不相关的存储位置。通过将每个元素与前一个元素的链接和后一个元素的链接关联起来&…...
软件设计师-排序算法
冒泡排序 每一趟冒泡排序,从第0个元素开始,和后面的元素比较,如果大于就交换,否则不变,每次冒泡可以把最大的元素放到最后一个,第一次冒泡的终点是n-1,第二趟的是n-2,直到最后剩下一个元素。时间复杂度O(n…...

即插即用篇 | YOLOv8 引入 代理注意力 AgentAttention
Transformer模型中的注意力模块是其核心组成部分。虽然全局注意力机制具有很强的表达能力,但其高昂的计算成本限制了在各种场景中的应用。本文提出了一种新的注意力范式,称为“代理注意力”(Agent Attention),以在计算效率和表示能力之间取得平衡。代理注意力使用四元组(Q…...

020_Servlet_Mysql学生选课系统(新版)_lwplus87
摘 要 随着在校大学生人数的不断增加,教务系统的数据量也不断的上涨。针对学生选课这一环节,本系统从学生网上自主选课以及课程发布两个大方面进行了设计,基本实现了学生的在线信息查询、选课功能以及教师对课程信息发布的管理等功能&…...

LabVIEW导入并显示CAD DXF文件图形 程序见附件
LabVIEW导入并显示CAD DXF文件图形 程序见附件 LabVIEW导入并显示CAD DXF文件图形 程序见附件 - 北京瀚文网星科技有限公司 LabVIEW广泛应用于自动化、数据采集、图形显示等领域。对于涉及CAD图形的应用,LabVIEW也提供了一些方法来导入和显示CAD DXF文件&#x…...

《云原生安全攻防》-- K8s安全防护思路
从本节课程开始,我们将正式进入防护篇。通过深入理解K8s提供的多种安全机制,从防守者的角度,运用K8s的安全最佳实践来保障K8s集群的安全。 在这个课程中,我们将学习以下内容: K8s安全防护思路:掌握K8s自身提…...
鸿蒙系统的发展及开发者机遇
鸿蒙系统(HarmonyOS)凭借其分布式架构和跨设备协同能力,展现出强大的发展潜力,在智能手机、智能穿戴、车载、家居等行业领域应用日益广泛,已逐渐形成与安卓、iOS 三足鼎立的市场格局。 开发者面临的挑战 1. 技术适应与…...

Java | Leetcode Java题解之第556题下一个更大元素III
题目: 题解: class Solution {public int nextGreaterElement(int n) {int x n, cnt 1;for (; x > 10 && x / 10 % 10 > x % 10; x / 10) {cnt;}x / 10;if (x 0) {return -1;}int targetDigit x % 10;int x2 n, cnt2 0;for (; x2 %…...
OSPF动态路由配置实验:实现高效网络自动化
实验主题:OSPF动态路由协议配置 实验背景 OSPF(Open Shortest Path First)是一种基于链路状态的路由协议,广泛应用于中大型网络中。它采用Dijkstra算法计算最短路径,以确保网络中的路由更新快速、稳定,并能…...

DAY43打卡
浙大疏锦行 kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化 进阶:并拆分成多个文件 fruit_cnn_project/ ├─ data/ # 存放数据集(需手动创建,后续放入图片) │ ├─ train/ …...

VR视频制作有哪些流程?
VR视频制作流程知识 VR视频制作,作为融合了创意与技术的复杂制作过程,涵盖从初步策划到最终呈现的多个环节。在这个过程中,我们可以结合众趣科技的产品,解析每一环节的实现与优化,揭示背后的奥秘。 VR视频制作有哪些…...

Hubstudio浏览器如何使用Loongproxy?
1. 使用软件 1.1 Loongproxy 1. 顶级ISP资源:Loongproxy是神龙云旗下品牌,依托与全球领先ISP运营商的深度合作,Loongproxy 精选全球优质静态住宅IP资源。 2. IP池庞大:覆盖 100 国家/地区,构建庞大的 70 万 静态IP池…...

vscode自定义主题语法及流程
vscode c/c 主题 DIY 启用自己的主题(最后步骤) 重启生效 手把手教你制作 在C:\Users\jlh.vscode\extensions下自己创建一个文件夹 里面有两个文件一个文件夹 package.json: {"name":"theme-jlh","displayName":"%displayName%&qu…...

阿里云事件总线 EventBridge 正式商业化,构建智能化时代的企业级云上事件枢纽
作者:肯梦、稚柳 产品演进历程:在技术浪潮中的成长之路 早在 2018 年,Gartner 评估报告便将事件驱动模型(Event-Driven Model)列为十大战略技术趋势之一,指出事件驱动架构(EDA,Eve…...
k8s部署dify
以前部署过,最近重新部署发现还是存在很多问题,这里进行记录 1.基础配置内容 配置信息和账号密码 # dify-deployment.yaml--- # Namespace apiVersion: v1 kind: Namespace metadata:name: dify-min--- # ConfigMap for shared environment variables…...
c++ 基于openssl MD5用法
基于openssl MD5用法 #include <iostream> #include <openssl/md5.h> using namespace std; int main(int argc, char* argv[]) { cout << "Test Hash!" << endl; unsigned char data[] "测试md5数据"; unsigned char out[1024…...
Vue.js 组件:深入理解与实践
Vue.js 组件:深入理解与实践 引言 随着前端技术的不断发展,Vue.js 作为一种流行的前端框架,因其简洁、易学、高效的特点受到越来越多开发者的青睐。在Vue.js中,组件是构建用户界面的基石。本文将深入探讨Vue.js组件的概念、特性、创建方式以及在实际开发中的应用,帮助读…...

智慧货运飞船多维度可视化管控系统
图扑搭建智慧货运飞船可视化系统,借数字孪生技术,高精度复刻货运飞船外观、结构与运行场景。整合多维度数据,实时呈现飞行状态、设备参数等信息,助力直观洞察货运飞船运行逻辑,为航天运维、任务推演及决策提供数字化支…...

ADI的BF609双核DSP怎么做开发,我来说一说(五)LAN口测试
作者的话 ADI的双核DSP,第二颗是Blackfin系列的BF609,这颗DSP我用了很久,比较熟悉,且写过一些给新手的教程。 硬件准备 ADSP-BF609-CORE:ADI BF609开发板 产品链接:https://item.taobao.com/item.htm?…...