在 JavaScript 中清理字符串
在本文中,将详细讨论清理。 还详细说明了用于清理 HTML 中的数据或防止 XSS 攻击的包。
使用 sanitize() 方法在 JavaScript 中清理字符串
Web 应用程序经常需要 HTML 输入。 但是,将它们安全地显示在网页上很困难,因为它们容易受到跨站点脚本 (XSS) 攻击。
Sanitizer 接口的 sanitize()
方法清理 DOM 节点树,删除不需要的元素或属性。 它应该在数据已经作为 DOM 节点可用时使用,例如在清理框架中的 Document 实例时。
默认的 sanitizer()
配置会自动去除与 XSS 相关的输入,包括脚本标签、自定义元素和注释。 可以使用 sanitizer() 构造函数选项自定义此配置。
语法:
sanitize(input)
参数:
- input :它可以是要清理的 DocumentFragment 或 Document。
返回值:
返回值是经过清理的 DocumentFragment。
我们现在将使用 id username 清理来自 iframe 的数据。
示例:
const sanitizer = new Sanitizer(); // Default sanitizer;
// Get the frame and its Document object
const frame_element = document.getElementById("username")
const unsanitized_frame_tree = frame_element.contentWindow.document;
// Sanitize the document tree and update the frame.
const sanitized_frame_tree = sanitizer.sanitize(unsanitized_frame_tree);
frame_element.replaceChildren(sanitized_frame_tree);
使用 DomPurify 的 sanitize() 方法在 JavaScript 中清理字符串
DOMPurify 是一种用于 HTML、MathML 和 SVG 的仅限 DOM 的 XSS 清理器,速度超快且容忍度过高。 使用和上手也毫不费力。
DOMPurify 是用 JavaScript 构建的,兼容所有现代浏览器(Safari (10+)、Opera (15+)、Internet Explorer (10+)、Edge、Firefox、Chrome 等,它们使用 Blink 或 WebKit)。 它不受 MSIE6 或其他旧版浏览器的影响,并且它要么使用回退,要么什么都不做。
自动化测试现在涵盖 19 种不同的浏览器,后续还会有更多。 另外,Node.js v14.15.1、v15.4.0、v16.13.0、v17.0.0 及更早的版本在JSDOM 上执行DOMPurify 时也会被覆盖。
安全专家凭借在在线攻击和 XSS 方面的丰富经验创建了 DOMPurify。
DOMPurify 做什么
DOMPurify 清理 HTML 并防止 XSS 攻击。 您可以向 DOMPurify 提供一个包含肮脏 HTML 的字符串,它会返回一个包含干净 HTML 的字符串(除非另有设置)。
DOMPurify 将删除任何包含有害 HTML 的内容。 它也相对较快。
它采用浏览器的技术并将它们转换为 XSS 过滤器,因此如果您的浏览器更快,DOMPurify 就会更快。 只需在您的网站上包含 DOMPurify 即可开始使用它。
使用未缩小的开发版本
<script type="text/javascript" src="src/pure.js"></script>
使用经过缩小和测试的生产版本
<script type="text/javascript" src="dist/pure.min.js"></script>
之后,您可以通过运行以下代码来清理字符串:
let clean = DOMPurify.sanitize(dirty);
生成的 HTML 可以使用 innerHTML 写入 DOM 元素或使用 document.write()
直接写入 DOM。 这完全取决于你。
值得注意的是,它默认允许 HTML、SVG 和 MathML。 如果你只需要 HTML,这是一个常见的用例,你也可以轻松地把它放好:
let clean = DOMPurify.sanitize(dirty, { USE_PROFILES: { html: true } });
请记住,如果您先清理 HTML 然后再编辑它,清理的好处可能会丢失。 如果您在清理后将经过清理的标记发送到另一个库,请确保该库不会自行干扰 HTML。
清理标记后,您可以查看属性 DOMPurify.removed 以查看删除了哪些元素和属性。
如果你使用像 Require.js 这样的 AMD 模块加载器,你可以异步加载这个脚本:
import DOMPurify from 'dompurify';
var clean = DOMPurify.sanitize(dirty);
DOMPurify 可以在服务器端与 Node.js 一起使用,也可以在客户端与 Browserify 或等效翻译器一起使用。 需要 Node.js 4.x 或更高版本。
DOMPurify 旨在支持任何已标记为活动的版本。 同时,它逐步取消对标记为维护的任何版本的支持。
DOMPurify 可能不会立即中断所有维护中的版本,但它会停止针对特定早期版本运行测试。
npm install dompurify
对于 JSDOM v10 或更新版本:
const createDOMPurify = require('dompurify');
const { JSDOM } = require('jsdom');
const window = new JSDOM('').window;
const DOMPurify = createDOMPurify(window);
const clean = DOMPurify.sanitize(dirty);
对于早于 v10 的 JSDOM 版本:
const createDOMPurify = require('dompurify');
const jsdom = require('jsdom').jsdom;
const window = jsdom('').defaultView;
const DOMPurify = createDOMPurify(window);
const clean = DOMPurify.sanitize(dirty);
DOMPurify 支持什么
DOMPurify 默认支持 CSS 和 HTML 自定义数据属性。 它还支持 Shadow DOM 并递归清理 DOM 模板。
它还会清理 HTML 以便与 JQuery $()
和 elm.html()
API 一起使用,而不会导致任何问题。
相关文章
在 JavaScript 中更改字符串字符
发布时间:2023/06/04 浏览次数:75 分类:JavaScript
-
在本文中,我们将学习如何使用不同的代码示例在 JavaScript 中使用多种方法从给定的字符串值更改特定索引处的特定字符。
在 JavaScript 中构建字符串
发布时间:2023/06/04 浏览次数:60 分类:JavaScript
-
在本文中,我们将通过不同的代码示例学习如何使用连接运算符和一些内置方法(如 JavaScript 中的 join())来生成或构建字符串。
如何在 JavaScript 中压缩字符串
发布时间:2023/06/04 浏览次数:175 分类:JavaScript
-
在 JavaScript 中,可以有范围很广的压缩,比如 gzip 之类的文件压缩等等。 在这里,我们将讨论两种压缩字符串的方法。在 JavaScript 中使用 js-string-compression 压缩字符串
JavaScript 中的Anagram查找器
发布时间:2023/06/04 浏览次数:61 分类:JavaScript
-
在本文中,我们将学习 JavaScript 中 anagram 的概念。 我们将学习如何检查一个字符串是否是 JavaScript 中另一个字符串的变位词。
JavaScript String.concat() 方法
发布时间:2023/06/04 浏览次数:112 分类:JavaScript
-
javaScript String concat() 是一个内置函数,它将字符串连接在一起并返回连接后的字符串。使用 JavaScript String concat() 方法连接两个字符串
JavaScript 中的左修剪字符串
发布时间:2023/06/04 浏览次数:80 分类:JavaScript
-
使用正则表达式和 replace() 函数在 JavaScript 中左修剪字符串。在 JavaScript 中使用带有 substring() 函数的 while 循环来左修剪字符串
在 JavaScript 中过滤字符串
发布时间:2023/06/04 浏览次数:53 分类:JavaScript
-
在这里,我们将演示使用具有基本箭头操作和特定条件的 filter() 方法。 此外,我们将看到使用 indexOf()、test() 和 include() 方法来获取满足给定模式的字符串。使用带箭头函数的 filter() 方法在
JavaScript string.includes() 方法
发布时间:2023/06/04 浏览次数:139 分类:JavaScript
-
JavaScript string.includes() 方法查看一个字符串以检查它是否存在,并根据给定的字符串返回一个布尔值。
在 JavaScript 中循环遍历字典
发布时间:2023/06/03 浏览次数:105 分类:JavaScript
-
本篇文章将介绍如何在 JavaScript 中迭代对象或字典来提取键值对。使用 Object.entries() 在 JavaScript 中循环遍历字典 我们可以使用 Object.entries() 方法返回给定对象的 [key, value] 对字符串键可枚举属性