当前位置: 首页 > news >正文

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 实体,例如 < 被编码为 &lt;。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 库&#xff0c;主要用于防止 XSS&#xff08;跨站脚本攻击&#xff09;。它允许你定义一套规则来决定哪些 HTML 标签和属性是可以被信任的&#xff0c;从而确保用户输入的内容不会包含潜在的恶意代码。 主要功能 HTML…...

【JavaEE】文件io

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

FlinkPipelineComposer 详解

FlinkPipelineComposer 详解 原文 背景 在flink-cdc 3.0中引入了pipeline机制&#xff0c;提供了除Datastream api/flink sql以外的一种方式定义flink 任务 通过提供一个yaml文件&#xff0c;描述source sink transform等主要信息 由FlinkPipelineComposer解析&#xff0c…...

蓝桥杯-洛谷刷题-day2(C++)

目录 1.小写字母与大写字母的转换 2.使用string&#xff08;额外开一章持续补充&#xff09; 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)&#xff1a;文档对象模型&#xff0c;就是Javascript将HTML文档的各个组成部分封装为对象&#xff0c;通过修改HTML元素的内容和样式动态改变页面。 如何获取DOM对象 获取DOM中的元素对象&#xff08;Element对象/标签&…...

《揭秘观察者模式:作用与使用场景全解析》

在软件开发的世界中&#xff0c;设计模式就像是建筑师手中的蓝图&#xff0c;指导着软件系统的构建。其中&#xff0c;观察者模式是一种极为重要且广泛应用的设计模式。今天&#xff0c;我们就来深入探讨一下观察者模式的作用和使用场景。 一、观察者模式是什么&#xff1f; …...

【QT常用技术讲解】优化网络链接不上导致qt、qml界面卡顿的问题

前言 qt、qml项目经常会涉及访问MySQL数据库、网络服务器&#xff0c;并且界面打开时的初始化过程就会涉及到链接Mysql、网络服务器获取数据&#xff0c;如果网络不通&#xff0c;卡个几十秒&#xff0c;会让用户觉得非常的不爽&#xff0c;本文从技术调研的角度讲解解决此类问…...

下划线命名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服务器&#xff0c;首先确保正确安装docker&#xff0c;并且已启动运行&#xff0c;具体安装docker方法见笔者前面的博文《OpenEuler 下 Docker 安装、配…...

显示器接口种类 | 附图片

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

C++初阶——list

一、什么是list list是一个可以在序列的任意位置进行插入和删除的容器&#xff0c;并且可以进行双向迭代。list的底层是一个双向链表&#xff0c;双向链表可以将它们包含的每个元素存储在不同且不相关的存储位置。通过将每个元素与前一个元素的链接和后一个元素的链接关联起来&…...

软件设计师-排序算法

冒泡排序 每一趟冒泡排序&#xff0c;从第0个元素开始&#xff0c;和后面的元素比较&#xff0c;如果大于就交换&#xff0c;否则不变&#xff0c;每次冒泡可以把最大的元素放到最后一个&#xff0c;第一次冒泡的终点是n-1,第二趟的是n-2,直到最后剩下一个元素。时间复杂度O(n…...

即插即用篇 | YOLOv8 引入 代理注意力 AgentAttention

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

020_Servlet_Mysql学生选课系统(新版)_lwplus87

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

LabVIEW导入并显示CAD DXF文件图形 程序见附件

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

《云原生安全攻防》-- K8s安全防护思路

从本节课程开始&#xff0c;我们将正式进入防护篇。通过深入理解K8s提供的多种安全机制&#xff0c;从防守者的角度&#xff0c;运用K8s的安全最佳实践来保障K8s集群的安全。 在这个课程中&#xff0c;我们将学习以下内容&#xff1a; K8s安全防护思路&#xff1a;掌握K8s自身提…...

鸿蒙系统的发展及开发者机遇

鸿蒙系统&#xff08;HarmonyOS&#xff09;凭借其分布式架构和跨设备协同能力&#xff0c;展现出强大的发展潜力&#xff0c;在智能手机、智能穿戴、车载、家居等行业领域应用日益广泛&#xff0c;已逐渐形成与安卓、iOS 三足鼎立的市场格局。 开发者面临的挑战 1. 技术适应与…...

Java | Leetcode Java题解之第556题下一个更大元素III

题目&#xff1a; 题解&#xff1a; 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动态路由配置实验:实现高效网络自动化

实验主题&#xff1a;OSPF动态路由协议配置 实验背景 OSPF&#xff08;Open Shortest Path First&#xff09;是一种基于链路状态的路由协议&#xff0c;广泛应用于中大型网络中。它采用Dijkstra算法计算最短路径&#xff0c;以确保网络中的路由更新快速、稳定&#xff0c;并能…...

高基数分类变量编码实战:均值、低秩与多项式逻辑回归方法解析

1. 项目概述&#xff1a;高基数分类变量的编码困局与破局思路在数据科学和机器学习的日常建模工作中&#xff0c;分类变量&#xff08;Categorical Variables&#xff09;的处理是绕不开的一环。从用户ID、邮政编码到产品SKU&#xff0c;这些变量往往携带了丰富的信息&#xff…...

新装Ubuntu 22.04.4 LTS后,我做的第一件事:开启root和SSH远程管理

新装Ubuntu 22.04.4 LTS后必做的安全加固与远程管理配置拿到一台全新安装的Ubuntu 22.04.4 LTS服务器时&#xff0c;很多开发者会迫不及待地开始部署应用。但根据我管理上百台服务器的经验&#xff0c;初始配置的质量直接决定了后续运维的难易程度。本文将分享我每次部署新系统…...

DamaiHelper:基于Python+Selenium的大麦网自动化抢票解决方案

DamaiHelper&#xff1a;基于PythonSelenium的大麦网自动化抢票解决方案 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 你是否曾经在演唱会门票开售的瞬间&#xff0c;面对"秒光"的票…...

3步实现Windows任务栏透明化:从新手到专家的桌面美化全攻略

3步实现Windows任务栏透明化&#xff1a;从新手到专家的桌面美化全攻略 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Windows任务栏透明…...

如何解决网易云音乐NCM格式限制:ncmdump完整实战指南

如何解决网易云音乐NCM格式限制&#xff1a;ncmdump完整实战指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾因网易云音乐的NCM加密格式而无法在喜欢的播放器上聆听音乐&#xff1f;ncmdump正是你需要的解决方案。这款开…...

保姆级教程:为你的CentOS7服务器手动安装GNOME桌面,告别黑屏与鼠标箭头

从零构建CentOS7图形化工作站&#xff1a;GNOME桌面完整安装与深度优化指南当你第一次面对CentOS7漆黑的命令行界面时&#xff0c;那种茫然无措的感觉我深有体会。三年前接手公司第一台生产服务器时&#xff0c;我盯着闪烁的光标整整十分钟不敢敲下任何命令——毕竟在Ubuntu漂亮…...

物理信息机器学习在声场估计中的应用:原理、实践与前沿

1. 物理信息机器学习&#xff1a;当声学物理遇上数据智能 如果你在声学、音频信号处理或者空间音频领域工作&#xff0c;那么“声场估计”这个词对你来说一定不陌生。简单来说&#xff0c;它就像是用有限的几个“耳朵”&#xff08;传声器&#xff09;去“猜”出整个空间里每一…...

高维数据压缩:秩-1格点与双曲交叉方法原理与应用

1. 项目概述&#xff1a;高维数据压缩的格点与双曲交叉方法在科学计算和工程仿真中&#xff0c;我们常常需要处理由海量样本点构成的高维数据集。想象一下&#xff0c;你正在模拟一架飞机的气动性能&#xff0c;或者评估一个复杂金融模型的风险&#xff0c;每一次仿真都可能产生…...

Telnet与SSH协议本质区别:从TCP连接到会话安全的底层解析

1. 为什么今天还在聊Telnet和SSH&#xff1f;一个被低估的“连接底层”分水岭 很多人以为Telnet和SSH只是“老古董协议”和“新标准协议”的简单替换关系&#xff0c;甚至觉得“现在谁还用Telnet&#xff1f;直接上SSH不就完了&#xff1f;”——这种认知在日常运维中看似无害&…...

量子机器学习可解释性:从黑箱到透明决策的LRP与数字孪生方法

1. 量子机器学习可解释性&#xff1a;从黑箱到透明决策量子机器学习&#xff08;QML&#xff09;这几年火得不行&#xff0c;但说实话&#xff0c;很多从业者&#xff0c;包括我自己在内&#xff0c;最初接触时都有点“懵”。模型性能上去了&#xff0c;可它到底是怎么做决策的…...