我继承了一个Web应用程序,该应用程序已经具有一些输入字段,可以接受来自用户的纯HTML。 (您可能知道XSS(跨站点脚本)铃声在这里响起!!)

使用@ Html.Raw在相同的视图页面上显示相同的输入(...现在钟声响了)

而且,为了能够完成这项工作,Controller上的[ValidateInput(false)]装饰器和Model字段上的[AllowHtml]装饰着整个图片……(我能说些什么!!!!)

现在,在有人将某位程序员判处死刑之前:-)让我明确指出,此危险的输入功能已允许特定管理员角色的用户使用。因此,这是一种受控情况。

不过,最近,我们决定对此情况进行一些控制,因为在管理员用户本人的恶意行为的情况下,此功能会从内部产生风险。

易于实现的选项是禁用整个功能,并添加一些Markdown编辑器,该编辑器将存储无害的Rich-Text-Format输入,但是我仍然必须将所有现有数据转换为该Markdown,以便它们正确显示。

不过,我需要的是通过添加某种Script标记和其他危险标记的过滤器(作为现有Html.Raw帮助器的扩展)来降低内部风险,而不是消除内部风险。

有人可以建议一种扩展或包装现有HtmlHelper的方法吗?

以下是元数据信息:

// Summary:
//     Returns markup that is not HTML encoded.
//
// Parameters:
//   value:
//     The HTML markup.
//
// Returns:
//     The HTML markup without encoding.
public IHtmlString Raw(string value);

最佳答案

使用Microsoft AntiXSS库可以避免跨站点脚本攻击。安装AntiXSS 4.3.0。来自nuget Install-Package AntiXSS

@Html.Raw(Microsoft.Security.Application.Sanitizer.GetSafeHtmlFragment(value))


如果这不起作用,请尝试使用AjaxControlToolkit的HtmlAgilityPackSanitizerProvider。使用此方法,您可以将一些标签和属性列入白名单。

您可以检查此SO link

关于c# - 如何在显示之前扩展Html.Raw以清理危险的HTML数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35768910/

10-10 04:51