我如何安全地从 React 组件渲染 Markdown?
How do I SAFELY render Markdown from a React component?
我想在我的 ReactJS 应用程序中显示降价,但安全地完成它很重要。我将要显示的降价文件是不受信任的 public 内容。
我看过各种解决方案,它们都使用了 dangerouslySetInnerHTML。
我忍不住想这可能是,呃,危险。
有人有什么想法吗?
谢谢
They gave dangerouslySetInnerHTML
a scary name very deliberately,以确保人们 非常 仔细考虑他们是否需要使用 it/whether 他们正在正确使用它。看到你问这个问题,显然它做得很好!但 Markdown 渲染实际上是一个必要的例子。
基本上,归根结底是:dangerouslySetInnerHTML
只有在您没有事先确保放入其中的东西是安全的情况下才是危险的。小心点,别被它吓跑了!
编辑: 正如 Waylan 在评论中提到的,我给出的示例非常幼稚,没有考虑 other ways XSS attacks can be achieved through Markdown。很可能你想要 运行 输出 通过消毒剂而不是 of/as 以及输入,否则很可能生成恶意 HTML 而不是像嵌入 script
标签那样简单。不过,我回答的要点是一样的; dangerouslySetInnerHTML
的危险程度取决于您放入其中的内容。做你的研究,确保输入是安全的,你会没事的。
如果输入不受信任(并且您对此无能为力),图书馆应在显示输入之前正确清理输入。
我发现两个库似乎可以做到这一点:
我想在我的 ReactJS 应用程序中显示降价,但安全地完成它很重要。我将要显示的降价文件是不受信任的 public 内容。
我看过各种解决方案,它们都使用了 dangerouslySetInnerHTML。
我忍不住想这可能是,呃,危险。
有人有什么想法吗?
谢谢
They gave dangerouslySetInnerHTML
a scary name very deliberately,以确保人们 非常 仔细考虑他们是否需要使用 it/whether 他们正在正确使用它。看到你问这个问题,显然它做得很好!但 Markdown 渲染实际上是一个必要的例子。
基本上,归根结底是:dangerouslySetInnerHTML
只有在您没有事先确保放入其中的东西是安全的情况下才是危险的。小心点,别被它吓跑了!
编辑: 正如 Waylan 在评论中提到的,我给出的示例非常幼稚,没有考虑 other ways XSS attacks can be achieved through Markdown。很可能你想要 运行 输出 通过消毒剂而不是 of/as 以及输入,否则很可能生成恶意 HTML 而不是像嵌入 script
标签那样简单。不过,我回答的要点是一样的; dangerouslySetInnerHTML
的危险程度取决于您放入其中的内容。做你的研究,确保输入是安全的,你会没事的。
如果输入不受信任(并且您对此无能为力),图书馆应在显示输入之前正确清理输入。
我发现两个库似乎可以做到这一点: