【发布时间】:2010-09-25 00:57:20
【问题描述】:
我想尝试一种流行的 HTML 模板语言,看看我是否可以解决其中的 XSS 问题。什么是我可以尝试解决的流行的开源模板语言。
模板语言是指一种用于通过将输出语言中的静态内容与来自其他来源的动态数据相结合来生成输出语言的语言。例如。 PHP 常用作 HTML/CSS/JS 的模板语言,XSLT 是 XML 的模板语言。
理想的模板语言应该是
- 广泛使用
- 开源
- 还没有解决XSS
- 语法越简单越好
这个想法是
- 解析每个模板,以便我最终得到一棵由原始 HTML 块组成的树、生成需要编码的动态值的表达式,以及条件 (switch/if) 和循环构造。
- 遍历树推断上下文。可能的上下文可能包括(HTML_PCDATA、IN_JS_DBL_QUOTED_STR 等)因此,如果我在 HTML PCDATA 上下文中看到一大块原始 HTML、
<a href=",那么我会转到我期望部分 URL 的上下文。当我到达一个分支或循环时,独立地跟随每个分支,然后加入上下文。 - 如果语言有模板,请尝试确定静态调用图,以便我可以克隆模板并重写在多个上下文中调用给定模板的调用。
- 通过调用将产生动态值的表达式包装到我实现的库中,该库包括像
expectHtml(...)、expectJsValue(...)这样对动态值进行适当编码的函数。例如。expectHtml(...)将&lt;转换为&lt;。 - 提供一些便利功能,以便向模板提供数据的代码可以使用 RTTI 来指定动态值的语言以避免过度转义。所以
expectHtml(...)不会转义Html类型的值,因为它被假定来自像knownSafeHtml(...)或stripBadTags(...)这样的安全源
【问题讨论】:
-
不是真正的模板语言,但是不使用提供的 XSS 转义工具的“普通”PHP、JSP 或 ASP 怎么样?
-
我认为您不会找到任何广泛使用的具有 XSS 漏洞的东西。这就像要求一辆没有任何刹车的广泛使用的汽车。如果它有那么大的安全问题,它就不会被广泛使用。正如 BalusC 所提到的,您可能需要使用现有框架并移除 XSS 防护。
-
@Brent、PHP、JSP 和 ASP 被广泛使用,用它们编写的应用程序充斥着 XSS 问题。也许,换个说法,如果 $world 由攻击者控制,那么语言相当于“Hello, $world”是否会打开 XSS 漏洞。干杯,迈克
-
@BalusC,JSP 可能是一个很好的最后手段。已发表的语法。广泛用于编写易受攻击的应用程序。作为奖励,有一个编译管道,我可以将我的代码插入其中。虽然它是一种大型语言。
-
我明白了,我误解了您的要求。当您说模板语言时,我以为您的意思是 Smarty。考虑到这一点,我想大多数常见的网络语言都符合您的要求。
标签: html templates template-engine