播客 58 (大约 20 分钟后),杰夫抱怨了以下问题 HTML.Encode() Joel 谈到使用类型系统来拥有普通字符串和 HTMLString:

  • 关于无法实现 HTML 的视图引擎的邪恶的简短政治咆哮 默认编码。问题 这种设计选择是它不是 “safe by default”,这始终是 框架或 API 的错误选择。忘记对一些 用户输入的数据合二为一 Web 应用中的臭味,以及 您将完全拥有 XSS。相信它。我知道,因为它是 发生在我们身上。多次!

  • 乔尔(Joel)坚持这一点,使用强类型语言和正确的 框架,这是可能的(理论上) 完全消除 XSS — 这 需要使用特定数据 type,这是你唯一的方法 将数据发送到浏览器。该数据 类型将在编译时进行验证 时间。

博客文章中的评论提到使用静态分析来查找潜在的弱点。这 文字记录维基 还没有完成。

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

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

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

有帮助吗?

解决方案

要在任何地方使用 HtmlString,您实际上必须重写每个 Web 控件的每个属性和方法。System.String 是密封的,因此您无法对其进行子类化。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top