带有标记的 sanitizeHtml 无法正确呈现特殊字符(& 是 & 然后是 &放大器)

sanitizeHtml with marked doesn't render special characters correctly (& is & and then &amp)

提问人:Milano 提问时间:6/26/2023 更新时间:6/26/2023 访问量:43

问:

我正在尝试使用(使用标记)呈现用户输入。SvelteMarkdown

步骤如下:

  1. 使用 sanitizeHtml 清理用户输入
  2. 经过清理的用户输入将呈现在SvelteMarkdownhtml

问题在于它不会呈现应显示的特殊字符。这是因为它们被转换了两次。

  1. 输入“Tom & Jerry”
  2. sanitizeHtml("Tom & Jerry") > "Tom & Jerry" - 这是浏览器正确呈现它所需的格式
  3. SvelteMarkdown("Tom & Jerry") > "Tom & Jerry"

不确定如何在保持安全措施的同时做到这一点。当我不使用时,很多事情可能会变坏,例如在内容呈现后打开警报窗口。sanitizeHtml<img src='x' onerror='alert("XSS")'>

我想做的是渲染一些字符,如“<”、“>”、“&”等,但在我处理用户生成的内容时仍然是“安全的”。

有什么解决办法吗?

javascript html svelte sanitization javascript-marked

评论

0赞 H.B. 6/26/2023
你可以编写自己的包装器(在我之前完成),并以正确的顺序做事,即将MD转换为HTML,然后对其进行清理。此外,Markdown 渲染组件可能应该内置清理功能作为选项。marked
0赞 Milano 6/26/2023
@H.B.我在这方面不是很有经验,但是是的,它内置了一些清理功能,但我不确定它是否安全,因为像这样的内容“<img src='x' onerror='alert(”XSS“)'>”会为任何阅读/看到评论的用户生成警报。这就是为什么我认为我也需要使用 sanitizeHtml。

答: 暂无答案