【问题标题】:How do I display user input text in a way that treats it like plain text even if it's got html tags?如何以将用户输入文本视为纯文本的方式显示用户输入文本,即使它有 html 标签?
【发布时间】:2011-05-24 23:31:11
【问题描述】:

我的页面中有一个标签,显示用户输入的数据。

问题是如果用户输入类似的东西

"Hey Jim, thought about using the <a> tag" 

我的页面中有一个标签,显示用户输入的数据。

我使用 Uri.EscapeDataString 和 Uri.UnescapeDataString 对数据进行编码和解码,以便可以安全地存储在数据库中。

&lt;a&gt; 将被解释为 HTML,并对标签的其余部分做一些奇怪的事情。

我怎样才能让它像普通的纯文本一样显示&lt;a&gt;,而不是HTML标签。

【问题讨论】:

  • 您不应该对数据库中的数据进行编码。使用参数。
  • 数据库安全不是唯一的考虑;看我的回答。无论您是否对数据库中的数据进行编码,都需要对数据进行编码以供显示。但是,是的,使用参数。请。

标签: c# .net asp.net html


【解决方案1】:

像这样使用 Server.HtmlEncode():

lbl.Text = Server.HtmlEncode("Today is the Greatest!  <b>Hi!</b>");

【讨论】:

    【解决方案2】:

    这比其他回答者发现的要多一点。为了让用户甚至可以输入尖括号,您必须为相关页面关闭ValidateRequest。否则,你会得到一个异常。

    这样做时,您需要保持警惕,以防止跨站点脚本和其他攻击。 MSDN有一个概述。

    不过,基本上,您确实需要使用实体,正如其他海报所建议的那样,将尖括号更改为“安全”的东西。

    【讨论】:

    • 嗨,Andrew,非常正确,我已经通过了 ValidateRequest 步骤(再次感谢 SO)。花了我一段时间才发现 ASP.NET 默认不支持“
    【解决方案3】:

    Use entities 表示 HTML 中具有特殊含义的字符

    【讨论】:

      猜你喜欢
      • 2013-12-02
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多