MVC 2 到 Html.Encode() 字符串中是否有一些神奇的现有代码并允许某些 html 标记,如段落标记和中断?(来自 Linq 到 SQL 数据库字段)
实现效果的可怕代码示例:
Html.Encode(Model.fieldName).Replace("<br />", "<br />")
真正好的是重载某些东西并将一个包含允许的 html 标签的数组(或对象)传递给它。
MVC 2 到 Html.Encode() 字符串中是否有一些神奇的现有代码并允许某些 html 标记,如段落标记和中断?(来自 Linq 到 SQL 数据库字段)
实现效果的可怕代码示例:
Html.Encode(Model.fieldName).Replace("<br />", "<br />")
真正好的是重载某些东西并将一个包含允许的 html 标签的数组(或对象)传递给它。
根据正则表达式创建自己的白名单并不是一个好主意,因为您可能会无意中打开 XSS 的安全漏洞。
来自 Sanderson 的书“Pro ASP.NET MVC3 Framework”:“......唯一可行的缓解措施是严格的、基于白名单的过滤:使用HTML Agility Pack之类的库来确保用户提供的标记仅包含您明确指定的标签允许。”
Sanderson 继续提供一个指向一个站点的链接,该站点演示了广泛的 XSS 技术,如果您使用正则表达式方法,您必须测试这些技术。查看http://ha.ckers.org/xss.html
ASP.NET 或 MVC 没有为此内置任何内容,但是使用正则表达式等编写您自己的基于白名单的白名单并不难。这是杰夫写的,虽然它的边缘很粗糙......
我想不出任何现成的东西,但我想你可以编写一个扩展方法,允许你添加一个参数/允许的项目列表。
Html.Encode(Mode.fieldName, List<items> Myitems);
它可以将允许的标签修改为<
etc,然后像平常一样对其余的标签进行编码。