在MVC 2到Html.Encode()字符串中是否存在一些神奇的现有代码并允许某些html标记,如段落标记和中断?(从Linq到SQL数据库字段)
一个可怕的代码示例来实现这个效果:
Html.Encode(Model.fieldName).Replace("<br />", "
")
真正好的是重载一些东西并传递给一个充满允许的html标签的数组(或对象).
基于正则表达式创建自己的白名单并不是一个好主意,因为您可能会无意中为XSS打开安全漏洞.
来自Sanderson的书"Pro ASP.NET MVC3 Framework":"......唯一可行的缓解是严格的,基于白名单的过滤:使用像HTML Agility Pack这样的库来确保用户提供的标记仅包含您明确的标记允许."
Sanderson继续提供一个站点的链接,该站点演示了如果使用正则表达式方法,您必须测试的各种XSS技术.查看http://ha.ckers.org/xss.html