如何安全地显示用户提交的html内容

How to safely display html content submitted by user?

本文关键字:提交 用户 html 内容 显示 何安全 安全      更新时间:2023-09-26

我正在进行堆栈溢出样式添加图像&格式化为帖子[尽可能通过stackoverflow帖子编辑工具],所以我有了可以用于在页面上显示的演示文稿的生成html。

但问题是如何显示html,当我尝试显示html时,它会像"<html>blah bhlah</html>"一样打印在页面上。如何在我的网页上安全地逃离这些html内容?

在您的案例中发生的情况是HTML被转义,因此被呈现为文本。

我不知道你在用什么语言写作,但我怀疑你使用了内置的文本转义函数。这会将HTML呈现为文本,但这不会使其安全

我怀疑你正在寻找的是一个解决方案:

  1. 解析HTML并对其进行净化,以删除任何潜在的恶意标签,如JavaScript、外部引用、iframe等
  2. 存储此经过消毒的HTML
  3. 将输入作为页面的一部分呈现

StackExchange只支持HTML的一个子集,您可能需要模仿所采取的方法。

这不是一个简单的问题,你很可能想找到一些框架来为你做这件事,而不是推出自己的框架。

例如,有人可能想对你的系统进行一些利用:

  • 用于转义包装元素的附加</div>标记
  • 某些字符组合可能看起来不像有效的HTML,但无论如何都是这样
  • 利用您页面上已有的一些Javascript
  • 添加CSS以破坏页面布局

这是一个两步的过程。首先,你需要用这样的库来恢复输入;http://msdn.microsoft.com/en-us/security/aa973814.aspx。它将删除脚本标签和其他人们可能试图做的恶意事情。

然后您需要显示原始输出。对于Asp.NetMVC,它是@Html.Raw(x=>x.SomePropertyThatIsHtml)。如果你使用其他东西,它应该有一个等价物来防止它被编码。