我继承了一个网络应用程序,它已经有一些输入字段接受用户的纯 Html。 (您可能会明白 XSS(跨站脚本)铃声在这里响起......!)
使用 @Html.Raw 在特定 View 页面上显示相同的输入(...铃声现在响亮了)
并且,为了能够完成这项工作, Controller 上的 [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);
最佳答案
使用 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/