Security 为什么React.js';API警告不要插入原始HTML?

Security 为什么React.js';API警告不要插入原始HTML?,security,xss,markdown,reactjs,Security,Xss,Markdown,Reactjs,从 但是有个问题!我们呈现的注释在 浏览器:“这是另一条评论。”。我们想要那些标签 以实际呈现为HTML 这就是保护您免受XSS攻击的反应。有一种方法可以 但框架警告您不要使用它: 这是一个特殊的API,故意使插入原始HTML变得困难,但为了决战,我们将利用这个后门 记住:通过使用此功能,您将依靠决战来确保安全 因此,存在一个用于插入原始HTML的API,但方法名和文档都会对此发出警告。使用这个安全吗?例如,我有一个聊天应用程序,它可以记录标记注释并将其转换为HTML字符串。HTML代码段由

但是有个问题!我们呈现的注释在 浏览器:“
这是另一条评论。”。我们想要那些标签
以实际呈现为HTML

这就是保护您免受XSS攻击的反应。有一种方法可以 但框架警告您不要使用它:

这是一个特殊的API,故意使插入原始HTML变得困难,但为了决战,我们将利用这个后门

记住:通过使用此功能,您将依靠决战来确保安全

因此,存在一个用于插入原始HTML的API,但方法名和文档都会对此发出警告。使用这个安全吗?例如,我有一个聊天应用程序,它可以记录标记注释并将其转换为HTML字符串。HTML代码段由标记转换器在服务器上生成。我相信转换器,但我不确定用户是否有任何方法可以仔细制定降价来利用XSS。我还应该做些什么来确保这是安全的?

大多数降价处理器(我也相信摊牌)允许编写者使用内联HTML。例如,用户可以输入:

This is _markdown_ with a <marquee>ghost from the past</marquee>. Or even **worse**:
<script>
  alert("spam");
</script>
这是一个来自过去的幽灵。甚至**更糟**:
警报(“垃圾邮件”);
因此,您应该有一个标记的白名单,并在从markdown转换为html后除去所有其他标记。然后才使用恰当命名的
危险的LysetinerHTML

请注意,这也是Stackoverflow的作用。上面的降价呈现如下(在您脸上不会出现警告):

这是一个来自过去的幽灵。或 更糟糕的是:

警报(“垃圾邮件”);
最好避免使用html有三个原因:

  • 安全风险(xss等)
  • 演出
  • 事件侦听器
  • <> P>安全风险在很大程度上被降价,但你仍然必须决定你认为有效的,并确保它被禁止(例如,你不允许图像)。 性能问题仅在标记中发生更改时才相关。例如,如果您使用以下命令生成html:
    “Time:+new Date()+”
    。React通常会决定只更新
    元素的文本内容,但会替换所有内容,浏览器必须重新分析html。在更大的html块中,这是一个更大的问题

    如果您确实想知道某人何时单击结果中的链接,那么您已经失去了简单地这样做的能力。您需要将onClick侦听器添加到最近的react节点,并确定单击了哪个元素,从那里授权操作

    如果您想在React中使用Markdown,我建议使用纯React渲染器,例如