3

MVC 2 到 Html.Encode() 字符串中是否有一些神奇的现有代码并允许某些 html 标记,如段落标记和中断?(来自 Linq 到 SQL 数据库字段)

实现效果的可怕代码示例:

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

真正好的是重载某些东西并将一个包含允许的 html 标签的数组(或对象)传递给它。

4

3 回答 3

5

根据正则表达式创建自己的白名单并不是一个好主意,因为您可能会无意中打开 XSS 的安全漏洞。

来自 Sanderson 的书“Pro ASP.NET MVC3 Framework”:“......唯一可行的缓解措施是严格的、基于白名单的过滤:使用HTML Agility Pack之类的库来确保用户提供的标记包含您明确指定的标签允许。”

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

于 2012-01-17T06:54:22.563 回答
4

ASP.NET 或 MVC 没有为此内置任何内容,但是使用正则表达式等编写您自己的基于白名单的白名单并不难。这是杰夫写的,虽然它的边缘很粗糙......

于 2010-03-29T05:15:27.177 回答
2

我想不出任何现成的东西,但我想你可以编写一个扩展方法,允许你添加一个参数/允许的项目列表。

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

它可以将允许的标签修改为&lt;etc,然后像平常一样对其余的标签进行编码。

于 2010-03-29T05:11:16.763 回答