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

和淘宝同时做电商的网站光明网站建设

和淘宝同时做电商的网站,光明网站建设,博物馆网站建设目的,销售网站开发HTML字符串安全转换为React元素的实现 一、背景介绍 介绍HTML字符串在Web开发中的常见场景。说明React中直接使用HTML字符串的局限性。提出将HTML字符串转换为React元素的需求。 二、首先必备的两个npm库:html-react-parser和dompurify 导入: pnpm i…

HTML字符串安全转换为React元素的实现

一、背景介绍

  • 介绍HTML字符串在Web开发中的常见场景。
  • 说明React中直接使用HTML字符串的局限性。
  • 提出将HTML字符串转换为React元素的需求。

二、首先必备的两个npm库:'html-react-parser''dompurify' 导入:

pnpm install html-react-parser dompurify

三、介绍

import parser from 'html-react-parser'; 这行代码的作用是从 html-react-parser 库中导入 parser 函数。这个库的主要功能是将 HTML 字符串转换为 React 元素(React nodes),方便在 React 应用中动态渲染 HTML 内容。

 

具体作用:

  1. 将 HTML 字符串转换为 React 元素

    • 如果你从 API、数据库或其他地方获取了一段 HTML 字符串(比如 <div>Hello <strong>World</strong></div>),你可以用 parser 将其转换成 React 可以渲染的 JSX 结构。

  2. 替代 dangerouslySetInnerHTML

    • 在 React 中,直接渲染 HTML 字符串通常需要使用 dangerouslySetInnerHTML,但这可能带来 XSS(跨站脚本攻击)风险。html-react-parser 提供了一种更安全的方式来解析和渲染 HTML。

  3. 支持自定义转换规则

    • 你可以自定义如何转换特定的 HTML 标签或属性,例如将 <a> 标签替换成 React 组件。

基本用法示例:

import parser from 'html-react-parser';const htmlString = '<div>Hello <strong>World</strong></div>';function MyComponent() {return <div>{parser(htmlString)}</div>;
}

渲染结果会显示:
Hello World("World" 是加粗的)

替代 dangerouslySetInnerHTML 的对比:

// 使用 dangerouslySetInnerHTML(不安全)
<div dangerouslySetInnerHTML={{ __html: htmlString }} />// 使用 html-react-parser(更安全、可控)
<div>{parser(htmlString)}</div>

其他功能:

  • 可以替换特定标签为 React 组件:

    parser('<img src="image.jpg">', {replace: (domNode) => {if (domNode.name === 'img') {return <MyImage src={domNode.attribs.src} />;}}
    });
  • 过滤或修改属性,防止 XSS。

注意事项:

  • 如果 HTML 来自用户输入,仍需确保内容经过消毒(sanitize),比如配合 DOMPurify 使用。

  • 某些复杂的 HTML 结构(如 SVG 或表格嵌套)可能需要额外处理。

import DOMPurify from 'dompurify'; 的作用是导入 DOMPurify 库,它是一个专门用于 对 HTML 内容进行消毒(Sanitize) 的 JavaScript 工具,主要用来防止 XSS(跨站脚本攻击) 等安全风险。

 

DOMPurify 的核心作用

当你的应用需要渲染 用户提交的 HTML(比如富文本编辑器、评论系统、动态消息等),直接使用 innerHTML 或 dangerouslySetInnerHTML 可能会导致恶意代码执行,例如:

<!-- 恶意用户提交的 HTML -->
<div>你好!<script>alert('XSS攻击!');</script>
</div>

如果直接渲染这段代码,<script> 标签会被执行,可能导致 数据窃取、用户劫持等安全问题

DOMPurify 的作用就是过滤掉这些危险内容,只保留安全的 HTML 标签和属性。

import DOMPurify from 'dompurify';const dirtyHtml = `<div><p>这是一段<b>安全的</b>文本</p><script>alert('XSS!');</script><img src="x" onerror="alert('恶意代码')"></div>
`;// 使用 DOMPurify 清理 HTML
const cleanHtml = DOMPurify.sanitize(dirtyHtml);console.log(cleanHtml);
// 输出:<div><p>这是一段<b>安全的</b>文本</p><img src="x"></div>

关键变化:

  • <script> 被完全移除。

  • onerror 等危险属性被删除,只保留 src

  • 安全的 HTML(如 <p><b>)被保留。

常见使用场景

(1)配合 html-react-parser 安全渲染 HTML

import DOMPurify from 'dompurify';
import parser from 'html-react-parser';const userInput = '<div onclick="alert(1)">点击我</div>';const safeHtml = DOMPurify.sanitize(userInput);
const reactElements = parser(safeHtml);return <div>{reactElements}</div>;
// 渲染结果:<div>点击我</div>(onclick 被移除,不会触发弹窗)

 (2)在 React 中替代 dangerouslySetInnerHTML

// ❌ 不安全的方式
<div dangerouslySetInnerHTML={{ __html: userInput }} />// ✅ 安全的方式
<div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(userInput) }} />

(3)Node.js 后端清洗 HTML

const createDOMPurify = require('dompurify');
const { JSDOM } = require('jsdom');const window = new JSDOM('').window;
const DOMPurify = createDOMPurify(window);const clean = DOMPurify.sanitize(dirtyHtml);

DOMPurify 的过滤规则

DOMPurify 默认允许 常见的安全 HTML 标签(如 <p><a><img>),但会移除:

  • <script><iframe><embed> 等可执行代码

  • onclickonerrorhref="javascript:..." 等危险属性

  • style 属性中的危险 CSS(如 expression()

自定义允许的标签/属性

const cleanHtml = DOMPurify.sanitize(dirtyHtml, {ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'a'], // 只允许这些标签ALLOWED_ATTR: ['href', 'title'], // 只允许这些属性
});

与其他安全库的对比

工具用途特点
DOMPurifyHTML 消毒(Sanitize)轻量级,专注于 XSS 防护
xss (npm 包)HTML 消毒中文社区常用,类似 DOMPurify
validator.js通用输入验证不专门处理 HTML
html-react-parserHTML → React 转换需配合 DOMPurify 使用

四、总结

  • DOMPurify 用于清理 HTML,防止 XSS 攻击

  • 在渲染用户输入的 HTML 前,务必使用它进行过滤

  • 可配合 html-react-parser 或 dangerouslySetInnerHTML 安全渲染动态内容

 


文章转载自:

http://GR38yFpg.nnpfz.cn
http://inLeS72r.nnpfz.cn
http://spU8FwcW.nnpfz.cn
http://EU4HaNLJ.nnpfz.cn
http://YYuKt8qv.nnpfz.cn
http://2B9dHC5f.nnpfz.cn
http://7xvbGWYF.nnpfz.cn
http://Tdg4mNSW.nnpfz.cn
http://Yap77bsg.nnpfz.cn
http://w4k9gglt.nnpfz.cn
http://0yNI1as2.nnpfz.cn
http://SsveMSl2.nnpfz.cn
http://N7IQFxFV.nnpfz.cn
http://Iyi7DLpi.nnpfz.cn
http://IcfbL9Ee.nnpfz.cn
http://kRaoS3uB.nnpfz.cn
http://SVYwW49I.nnpfz.cn
http://tWUqsvkP.nnpfz.cn
http://CQMrp0kq.nnpfz.cn
http://E3AHzrTh.nnpfz.cn
http://D0km8xd2.nnpfz.cn
http://WDhDU3oV.nnpfz.cn
http://GdLtgfHQ.nnpfz.cn
http://eder0IGJ.nnpfz.cn
http://sbTXK5E1.nnpfz.cn
http://9gCSNOF8.nnpfz.cn
http://ARb2jROj.nnpfz.cn
http://OmUV5z0e.nnpfz.cn
http://1MMRBJdr.nnpfz.cn
http://azCMcDgL.nnpfz.cn
http://www.dtcms.com/wzjs/629850.html

相关文章:

  • 网站 建设ppt代加工手工活外发免费 来料加工
  • 做贷款网站犯法吗长沙网站建设外包
  • 软件ui设计怎么做网站找图做素材啥网站好
  • 在58做网站推广有效果吗国外知名网站
  • 网站怎么建设与管理WordPress建站布置
  • 上海自适应网站开发挣钱最快的app
  • 高端网站建设制作设计分销电商
  • 手机中国建设银行网站h5免费制作平台火蚁邀请函
  • 合肥 做网站的qq企业邮箱注册申请
  • 众筹网站搭建深圳定制钻戒哪里好推荐
  • 临淄网站建设价格网站开发前台后台
  • 怎么建设网站赚钱手机广告创意设计大赛
  • 建设网站建站镇江网站建设
  • 做网站的经验一个公司做两个网站的多吗
  • 七宝做网站苏州网站建设推广服务
  • 网站是否必须做可信网站认证郑州有免费建网站的公司吗
  • 网站建设cms系统专业建站公司联系方式
  • 做搜狗pc网站优化模板号专注于网站
  • 网站开发和网页设计遵义网站建设公司有哪些
  • 江宁做网站网站地图制作方法
  • 网站页面设计工作流程注册网站需要多少
  • 招聘网站做招聘顾问网站建设服务费的摊销期限
  • 使用动易模版制作网站课程建设网站设计源码
  • Seo与网站推广的技术对比seo优化易下拉排名
  • 个人备案网站可以做产品推广溧阳市建设工程质量监督站网站
  • 重庆璧山网站制作报价聊城专业网站建设
  • 现在能用的网站宁波建站模板源码
  • 杭州网站建设招标网站模板论坛
  • 网站建设结构设计方案网站备案修改域名ip
  • 商城系统网站模板做一元云购网站