在Podcast 58(大约 20 分钟)中,Jeff 抱怨了问题,HTML.Encode()
而 Joel 谈到了使用类型系统来拥有普通字符串和 HTMLStrings:
关于默认情况下无法进行 HTML 编码的视图引擎的邪恶性的简短政治咆哮。这种设计选择的问题在于它不是“默认安全的”,这对于框架或 API 来说总是错误的选择。忘记在您的 Web 应用程序的一个臭地方编码一些用户输入的数据,您将完全拥有 XSS。相信它。我知道,因为它发生在我们身上。多次!
Joel 坚持认为,使用强类型语言和正确的框架,(理论上)完全消除 XSS 是可能的——这需要使用特定的数据类型,这是向浏览器发送数据的唯一方式。该数据类型将在编译时进行验证。
博客文章中的评论提到使用静态分析来发现潜在的弱点。成绩单 Wiki尚未完成。
是否可以在没有新的 ASP.NET 框架的情况下实施 Joel 的建议?
是否可以简单地通过子类化每个控件并执行基于 HTMLString 的新接口来实现它?如果大多数人已经将控件子类化以便更好地注入特定于站点的功能,那么这不是很容易实现吗?
是否值得这样做而不是投资于静态分析?