ASP.NET MVC:如何在Html编码内容中允许一些HTML标记?

3

在MVC 2中是否存在一些神奇的代码用于Html.Encode()字符串并允许某些HTML标记,比如段落和换行符?(来自Linq to SQL数据库字段)

以下是一个可怕的代码示例以实现该效果:

Html.Encode(Model.fieldName).Replace("&lt;br /&gt;", "<br />")

真正好的做法是重载某个方法,并传递一个包含允许使用的HTML标签的数组(或对象)。

3个回答

5

基于正则表达式创建自己的白名单并不是一个好主意,因为这样做很可能会无意中为XSS攻击打开安全漏洞。

来自 Sanderson 的书《Pro ASP.NET MVC3 Framework》: "...唯一可行的缓解方法是采用严���的基于白名单的过滤方式:使用类似于HTML Agility Pack 的库来确保用户提供的标记只包含您明确允许的标签。"

Sanderson 继续提供了一个网站链接,该站展示了广泛的 XSS 技术,如果您使用正则表达式方法,则必须进行测试。请查看 http://ha.ckers.org/xss.html


4

ASP.NET或MVC本身没有提供此功能,但编写自己的基于白名单的过滤器并使用正则表达式等工具并不难。这里有一个Jeff写的例子,尽管它还有很多不完善之处...


2

我暂时想不到什么,但我猜你可以编写一个扩展方法,允许你添加参数/项目列表。

Html.Encode(Mode.fieldName, List<items> Myitems);

它可以将允许的标签修改为&lt;等,然后像正常情况下一样对其余部分进行编码。

1
这种方法的唯一问题是,如果有人在他们的HTML中明确放置&lt;br/&gt;(期望它显示为这样,而不是被转换为实际的换行符),那么当它被你的程序“取消转义”时,他们会感到惊讶... - Dean Harding

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接