【问题标题】:Preventing XSS exploits using the type system as Joel suggested使用 Joel 建议的类型系统防止 XSS 攻击
【发布时间】:2009-06-22 19:58:33
【问题描述】:

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

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

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

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

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

是否可以简单地通过子类化每个控件并基于 HTMLString 强制执行新接口来实现它?如果大多数人已经将控件子类化以更好地注入特定于站点的功能,这不是很容易实现吗?

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

【问题讨论】:

    标签: html architecture xss strong-typing


    【解决方案1】:

    要在任何地方使用 HtmlString,您基本上必须重写每个 Web 控件的每个属性和方法。 System.String 是密封的,所以你不能继承它。

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

    【讨论】:

    • 我想这就是我的观点。在我使用的许多 ASP.NET 应用程序中,自从我们实现 I18n 和用于验证和其他事情的特殊扩展以来,每个控件都已被子类化。
    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多