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

标签 c# asp.net-mvc xss html-helper razorengine

我继承了一个网络应用程序,它已经有一些输入字段接受用户的纯 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/

相关文章:

c# - 无法将类型 'UnityEngine.Vector2?' 隐式转换为 'UnityEngine.Vector2'

asp.net-mvc - Asp MVC,构建解决方案时 session 是否丢失?

php - 安全XSS清理功能(定期更新)

c# - 为什么 C# 自动实现的属性是公共(public)的?

c# - 将月份字符串转换为 int 格式

c# - 使用 C# 将系统日期转换为 M/d/yyyy 格式,而不管系统格式如何

asp.net-mvc - ASP.NET MVC 显示配置文件中的用户名

asp.net-mvc - 为具有 Web API 和常规 MVC Controller 的项目实现基于 token 的身份验证

javascript - 托管在不同域上的 JavaScript 可以读取/修改另一个域的 DOM 吗?

javascript - [XSS]Expressjs 阻止运行脚本形成 POST 请求