在Podcast 58(约20分钟)中,Jeff抱怨HTML.Encode()
和Joel谈论使用类型系统来获得普通字符串和HTMLStrings的问题:
关于未能使用HTML的视图引擎的恶意的简短政治咆哮 默认编码。这个问题 这种设计选择是不是 “默认安全”,这始终是 框架或API的错误选择。 忘记编码一些 用户输入的数据在一个单一的 在您的网络应用程序中发臭的地方,以及 您将完全拥有XSS。 相信它。我知道,因为它 发生在我们身上多次!
Joel坚持认为,使用强类型语言和正确的语言 框架,它是可能的(在理论上) 完全消除XSS - 这个 需要使用特定数据 类型,这是您唯一的方式 将数据发送到浏览器。那个数据 类型将在编译时验证 时间。
博客文章中的评论提到使用静态分析来发现潜在的弱点。 transcript Wiki尚未完成。
是否有可能在没有新的ASP.NET框架的情况下实现Joel的建议?
可能只需通过子类化每个控件并基于HTMLString强制实施新接口来实现它吗?如果大多数人已经将控件子类化,以便能够更好地注入特定于站点的功能,那么实现起来不是很容易吗?
是否值得这样做,而不是投资于静态分析?
答案 0 :(得分:2)
要在任何地方使用HtmlString,您基本上必须重写每个Web控件的每个属性和方法。 System.String是密封的,因此您不能将其子类化。
更简单(但仍然非常耗时)的方法是使用控制适配器以安全替代方案替换Web控件。在这种情况下,您将子类化每个Web控件并覆盖Render方法以对动态内容进行HTML编码。