如何扩展 Html.Raw 以便在显示之前清理危险的 HTML 数据

本文关键字:显示 危险 数据 HTML 何扩展 扩展 Raw Html | 更新日期: 2023-09-27 18:37:20

我继承了一个网络应用程序,该应用程序已经有一些输入字段接受来自用户的纯 Html。(你可能明白XSS(跨站点脚本)的钟声在这里响起...!

使用@Html.Raw (...钟声现在响得更大了)

而且,为了能够完成这项工作,控制器上的 [ValidateInput(false)] 装饰器和模型字段上的 [AllowHtml] 来填充图片......(关于钟声我能说些什么!!)

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

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

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

不过,我需要的是能够通过添加某种脚本标签过滤器和其他危险标签来降低内部风险 - 而不是消除 - 作为现有 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);

如何扩展 Html.Raw 以便在显示之前清理危险的 HTML 数据

使用 AntiXSS 库Microsoft您可以避免跨站点脚本攻击。安装AntiXSS 4.3.0 .从努吉特Install-Package AntiXSS.

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

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

您可以查看此 SO 链接