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

时间:2014-04-18 22:44:58

标签: javascript html security web

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

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

2 个答案:

答案 0 :(得分:2)

您的案例中发生的事情是HTML正在转义,因此会呈现为文字。

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

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

  1. 解析HTML并清理它以删除任何潜在的恶意代码,例如JavaScript,外部引用,iframe等。
  2. 存储此已清理的HTML。
  3. 将输入呈现为页面的一部分。
  4. StackExchange supports only a sctrict subset of HTML,您可能希望模仿所采用的方法。

    这不是一个需要解决的简单问题,你很可能希望找到一些能够为你做这件事的框架,而不是自己动手。

    例如,某些人可能想要针对您的系统进行攻击的漏洞利用:

    • 用于转义包装元素的其他</div>标记。
    • 某些字符组合可能看起来不像有效的HTML,但无论如何都表现得如此。
    • 利用您网页上已有的一些Javascript。
    • 添加CSS以打破页面布局。

答案 1 :(得分:1)

这是一个两步过程。首先,您需要使用这样的库对输入进行sanatize; http://msdn.microsoft.com/en-us/security/aa973814.aspx。它将删除脚本标签以及人们可能尝试做恶意事件的其他偷偷摸摸的事情。

然后你需要显示原始输出。使用Asp.Net MVC,它是@ Html.Raw(x =&gt; x.SomePropertyThatIsHtml)。如果你使用其他东西它应该有一个等效的,以防止它被编码。