【问题标题】:Making HTML show up as a link [closed]使 HTML 显示为链接 [关闭]
【发布时间】:2016-11-15 16:43:41
【问题描述】:

我试图在网站上显示从一个用户到另一个用户的消息。消息以 HTML 格式保存在数据库中。

为什么网站上的 HTML 会显示出来,而不是把 HTML 变成链接或换行符?

代码如下:

<div class="jumbotron">
    <h4><u>Your Messages</u></h4>
    @foreach (var m in Model.User.MessagesUsers)
    {
        <p>@m.Message</p>
    }
</div>

【问题讨论】:

  • 出于安全原因,它正在转义所有 html 标签。你用的是什么框架?
  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。请参阅How to Ask 页面以获得澄清此问题的帮助。
  • 这不是纯 HTML 和 CSS。
  • 我正在使用 Visual Studio
  • 换行符或链接与 html 一起显示,而不是显示为实际的链接或换行符。

标签: html css asp.net asp.net-mvc


【解决方案1】:

看起来您正在使用 ASP.NET MVC。出于安全原因,该框架会自动对输出进行 HTML 编码。

你可以通过using @Html.Raw解决这个问题:

<p>@Html.Raw(m.Message)</p>

请注意,但这是规避安全。确保您信任您的数据。这就是跨站点脚本攻击的发生方式。您可能还想研究Markdown 之类的内容,以允许用户输入您可以更好地控制的标记。

【讨论】:

  • 那么,如果不让自己面临安全风险,就没有办法解决这个问题吗?
  • @N.Sch:这取决于许多因素。如果您允许用户输入您将显示给他们或其他用户的数据,而无需对其进行 HTML 编码,那么这对其他用户来说是一个安全风险。 (即使是 HTML 编码也可能存在风险。我不知道有风险,但这并不意味着没有风险。)如果您信任数据的来源,风险就会更小。但请记住,“信任”并不一定意味着“登录用户发布它”。登录的用户可以做恶意的事情。
  • 最安全的方法是不允许用户输入HTML,允许markdown(或类似的东西)并即时将其转换为HTML,然后它是安全的(针对XSS)
猜你喜欢
  • 2014-01-17
  • 2017-12-09
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
相关资源
最近更新 更多