正如Joel所建议的,使用类型系统防止XSS攻击

时间:2009-06-22 19:58:34

标签: html architecture xss strong-typing

Podcast 58(约20分钟)中,Jeff抱怨HTML.Encode()和Joel谈论使用类型系统来获得普通字符串和HTMLStrings的问题:

  
      
  • 关于未能使用HTML的视图引擎的恶意的简短政治咆哮   默认编码。这个问题   这种设计选择是不是   “默认安全”,这始终是   框架或API的错误选择。   忘记编码一些   用户输入的数据在一个单一的   在您的网络应用程序中发臭的地方,以及   您将完全拥有XSS。   相信它。我知道,因为它   发生在我们身上多次!

  •   
  • Joel坚持认为,使用强类型语言和正确的语言   框架,它是可能的(在理论上)   完全消除XSS - 这个   需要使用特定数据   类型,这是您唯一的方式   将数据发送到浏览器。那个数据   类型将在编译时验证   时间。

  •   

博客文章中的评论提到使用静态分析来发现潜在的弱点。 transcript Wiki尚未完成。

是否有可能在没有新的ASP.NET框架的情况下实现Joel的建议?

可能只需通过子类化每个控件并基于HTMLString强制实施新接口来实现它吗?如果大多数人已经将控件子类化,以便能够更好地注入特定于站点的功能,那么实现起来不是很容易吗?

是否值得这样做,而不是投资于静态分析?

1 个答案:

答案 0 :(得分:2)

要在任何地方使用HtmlString,您基本上必须重写每个Web控件的每个属性和方法。 System.String是密封的,因此您不能将其子类化。

更简单(但仍然非常耗时)的方法是使用控制适配器以安全替代方案替换Web控件。在这种情况下,您将子类化每个Web控件并覆盖Render方法以对动态内容进行HTML编码。