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

C# 如何扩展Html.Raw以便在显示之前清理危险的Html数据,c#,asp.net-mvc,xss,html-helper,razorengine,C#,Asp.net Mvc,Xss,Html Helper,Razorengine,我继承了一个web应用程序,它已经有一些输入字段接受来自用户的纯Html。(您可能知道XSS(跨站点脚本)铃声在这里响起…!) 使用@Html.Raw在特定的视图页面上显示相同的输入(…铃声现在更响了) 为了能够完成这项工作,控制器上的[ValidateInput(false)]装饰程序和模型字段上的[AllowHtml]来填充图片。。。(关于钟我能说些什么!!!) 现在,在有人判处某个程序员死刑之前:-)让我澄清一下,这种危险的输入功能允许特定管理员角色的用户使用。所以这是一种可控的情况 不过

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

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

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

现在,在有人判处某个程序员死刑之前:-)让我澄清一下,这种危险的输入功能允许特定管理员角色的用户使用。所以这是一种可控的情况

不过,最近,我们决定对这种情况添加一些控制,因为这种功能会从内部产生风险,以防管理员用户自己的恶意行为

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

不过,我需要的是,通过添加脚本标记和其他危险标记的某种过滤器,作为现有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
安装软件包AntiXSS

@Html.Raw(Microsoft.Security.Application.Sanitizer.GetSafeHtmlFragment(value))
如果这不起作用,请尝试使用AjaxControlToolkit的
HtmlAgilityPackSanitizerProvider
。使用此选项可以将一些标记和属性列为白名单


你可以检查一下

这看起来很完美,谢谢你,帕万!我现在正在测试结果。。关于这一点的一个简单问题是:我可以用这样的东西来进行输入净化吗?@cnom是的,你可以使用经过更彻底的调查后,我发现这个库破坏了很多现有的格式(例如字体颜色、背景色等),这似乎有点奇怪。。。这就是为什么我还没有标出你的答案,我还在寻找更好的解决办法!您是否检查了AjaxControlToolkit的HtmlAgilityPackSanitizerProvider这没有回答问题。他提出了一种扩展Html.Raw的方法。这个答案要求他更换所有的it用途,这对于某些人来说可能不是一个选择。