禁用自动用户输入清理

时间:2019-07-04 13:27:15

标签: c# asp.net razor user-input sanitization

我正在设置一个新的ASP.NET服务器,并希望放入来自我自己的过滤方法的结果的HTML,因为我已经在使用自己的过滤方法。但是使用@会使用ASP.NET的清理方法自动清理代码,我不希望这样。

我曾尝试使用@符号在Razor Page中使用C#,但它一直使用ASP.NET的清理方法。

public string GetFormattedName(string name)
{
    // Sanitize user input
    return name.Replace("<","&gt;"); // And do my own fancy sanitization.
}
<h3>@Model.GetFormattedName("<strong class="bold-tag">etc</strong>")</h3>

呈现的HTML看起来像:

<strong class="bold-tag">etc</strong>

但应该是

(呈现为HTML)

我还有一种特殊的颜色代码语法,如下所示: [color:ff0000][/color]

我希望它仍然可以工作,并且使用ASP.NET的清理方法

2 个答案:

答案 0 :(得分:0)

尝试投射到IHtmString。

呈现为:

<h3>@Html.Raw(Model.GetFormattedName("<strong class="bold-tag">etc</strong>"))</h3>

答案 1 :(得分:0)

只需使用Html.Raw

尝试以下示例:

<h3>@Html.Raw(@"<strong class=""bold-tag"">etc</strong>")</h3>

应呈现为:

<h3><strong class="bold-tag">etc</strong></h3>