gpt4 book ai didi

javascript - 如何在前端 js 文件中安装、导入和使用 DOMPurify?

转载 作者:行者123 更新时间:2023-12-03 14:44:46 24 4
gpt4 key购买 nike

这更像是“您能否确认这是正确的”类型的问题,因为我认为我在编写问题的过程中解决了它,但希望它对其他有点犹豫的人有所帮助实现DOMPurify .

短版

导入和使用是否安全/有效DOMPurify像这样在前端 js 文件中:

npm install dompurify --save

import DOMPurify from 'dompurify';

var clean = DOMPurify.sanitize('<img src=x onerror=alert(1)//>', {SAFE_FOR_JQUERY: true});

详细版

目前我的主要前​​端 js 文件使用这些约定导入:
import ClipboardJS from 'clipboard';

// date-fns functions
import getYear from 'date-fns/get_year';
import getMonth from 'date-fns/get_month';
import getDaysInMonth from 'date-fns/get_days_in_month';
import startOfMonth from 'date-fns/start_of_month';
import getDay from 'date-fns/get_day';
import format from 'date-fns/format';

import Cookies from './js.cookie';

我尝试了以下方法:
npm install dompurify --save

import DOMPurify from 'dompurify';

console.log(DOMPurify.sanitize('<img src=x onerror=alert(1)//>', {SAFE_FOR_JQUERY: true}));
console.log(DOMPurify.sanitize('<svg><g/onload=alert(2)//<p>', {SAFE_FOR_JQUERY: true}));
console.log(DOMPurify.sanitize('<p>abc<iframe/\/src=jAva&Tab;script:alert(3)>def', {SAFE_FOR_JQUERY: true}));
console.log(DOMPurify.sanitize('<math><mi//xlink:href="data:x,<script>alert(4)</script>">', {SAFE_FOR_JQUERY: true}));
console.log(DOMPurify.sanitize('<TABLE><tr><td>HELLO</tr></TABL>', {SAFE_FOR_JQUERY: true}));
console.log(DOMPurify.sanitize('<UL><li><A HREF=//google.com>click</UL>', {SAFE_FOR_JQUERY: true}));

字符串示例来自这里:

https://github.com/cure53/DOMPurify#some-purification-samples-please

并使用 SAFE_FOR_JQUERY这里提到的标志:

https://github.com/cure53/DOMPurify#can-i-configure-it

一切都按预期记录,即:
<img src="x">
<svg><g></g></svg>
<p>abcdef</p>
<math><mi></mi></math>
<table><tbody><tr><td>HELLO</td></tr></tbody></table>
<ul><li><a href="//google.com">click</a></li></ul>

所以这很好。

问题

official DOMPurify readme显示以下导入和使用方式:
// method 01
<script type="text/javascript" src="dist/purify.min.js"></script>
var clean = DOMPurify.sanitize(dirty);

// method 02
require(['dompurify'], function(DOMPurify) {
var clean = DOMPurify.sanitize(dirty);
});

// method 03
npm install dompurify
const createDOMPurify = require('dompurify');
const { JSDOM } = require('jsdom');

const window = (new JSDOM('')).window;
const DOMPurify = createDOMPurify(window);

const clean = DOMPurify.sanitize(dirty);

// method 04
const createDOMPurify = require('dompurify');
const jsdom = require('jsdom').jsdom;

const window = jsdom('').defaultView;
const DOMPurify = createDOMPurify(window);

const clean = DOMPurify.sanitize(dirty);

即使没有列出我实现它的方式,这仍然是一种安全/有效的方式吗:
npm install dompurify --save

import DOMPurify from 'dompurify';

PS,如果需要上下文...

实现场景是:
01)用户以 span 开头:
<span class="editable" data-previous_value="here is previously saved value">here is previously saved value</span>
02)单击跨度时, data-previous_value 的值被添加到 input替换 span 的元素.
03)用户修改 input 中的文本元素并单击保存。
04)我用 markdown-ithtml选项设置为 falsemarkdown-it-attrs (添加css样式)和 markdown-it-span (定义 spans )将任何 Markdown 呈现为 html(链接、图像、类、跨度等)。
05)新值添加到新的 span元素(使用 markdown-it 渲染)和 data替换 input 的属性(未渲染)元素。
06)新的未渲染值保存在 MongoDB数据库通过 Node/Express .

例如,以下输入:
![img](/img/my_thumb.jpg){.video_thumb} [Video](https://www.youtube.com/watch?v=dQw4w9WgXcQ)

被转换成这个html:
<span class="editable" data-previous_value="![img](/img/my_thumb.jpg){.video_thumb} [Video](https://www.youtube.com/watch?v=dQw4w9WgXcQ)">
<img src="/img/my_thumb.jpg" alt="img" class="video_thumb">
<a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ">Video</a>
</span>

我正在考虑使用 DOMPurify 清理输入在到达 markdown-it 之前(在步骤 04 之前)。

最佳答案

对于 react :

import DOMPurify from "dompurify";
<div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(dirtyContent) }} />

关于javascript - 如何在前端 js 文件中安装、导入和使用 DOMPurify?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52741262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com