【问题标题】:What are the pros and cons of using an HTML parsing package like html-react-parser vs dangerouslySetInnerHtml in React在 React 中使用 HTML 解析包(如 html-react-parser vs dangerouslySetInnerHtml)的优缺点是什么
【发布时间】:2021-04-25 20:58:26
【问题描述】:

我们有一个包含 HTML 代码的数据库,我们正在使用 React 将其显示在网页上,但需要对其进行解析。

我最初使用html-react-parser,但在代码审查后被要求使用dangerouslySetInnerHtml,因为它没有任何依赖关系。

除了不使用 dangerouslySetInnerHtml 之外,我无法阐明使用 html-react-parser 的任何优势,但这是优势吗?如果是,为什么?它以某种方式避免了危险还是只是隐藏了它们?

非常感谢,

凯蒂

【问题讨论】:

    标签: reactjs html-parsing dangerouslysetinnerhtml html-react-parser


    【解决方案1】:

    我最近一直在为我正在处理的一个 Headless CMS 项目研究这个问题。据我了解:

    dangerouslySetInnerHtmlReactDOM.Render() 方法之外创建 DOM 元素,因此它不是由 React 库动态维护的。这基本上违背了最初使用 React 的目的(显示和维护虚拟 DOM)。

    不过,更令人担忧的是,它容易受到跨站脚本 (XSS) 攻击,这也是它得名的地方。这些是网络上一种非常常见的攻击形式。你可以在这里阅读:https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml

    如果您希望应用不太容易受到攻击,则必须使用像 DOMPurify 这样的清理库来处理 dangerouslySetInnerHtml,因此无论哪种方式,您都可能有另一个依赖项。一旦你为生产编译了应用程序 (npm build),最小化过程会使代码库变得非常紧凑,你可以预先使用代码分割等技术进行一些优化,这使得页面的每个部分仅在请求时加载,而不是全部加载一次:https://reactjs.org/docs/code-splitting.html

    就个人而言,我不会太担心一些依赖项 - 它们是现代网络中的一个事实。我一直倾向于使用html-react-parser,但我警告说我没有调查它是否会减少 XSS 漏洞。然而,即使两者都容易受到 XSS 攻击,至少 html-react-parser 会通过 ReactDOM.render() 引入这些元素,因此它们不会使 DOM 变得全是 catty-wompus - 这听起来像是未来灾难的秘诀。

    【讨论】:

    • 我知道你在几个月前就回答了这个问题,但我才发现你的回复。非常感谢 - 我感谢您的彻底回答!
    • 当然。实际上,我很高兴你提醒了我,因为我目前正在做一个再次使用它的项目,而我忘记了这个答案,所以效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2016-08-27
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多