@spring.url 宏没有转义 HTML
Posted
技术标签:
【中文标题】@spring.url 宏没有转义 HTML【英文标题】:@spring.url macro is not getting HTML escaped 【发布时间】:2021-10-18 11:29:42 【问题描述】:我正在使用 spring-boot + freemarker(标准初始化项目)。
我的 .ftlh 文件中有一行
<a href="<@spring.url '/$customer.email' />"
class="zenith-link"
id="use-qr-link">$customer.email
</a>
但是当我将"><script>alert("Boo!")</script>
作为客户电子邮件注入时,它不会被转义(因此我的应用存在 XSS 漏洞)
有什么方法可以将 htmlEscape 设置为 true
【问题讨论】:
【参考方案1】:我检查了源代码(https://github.com/spring-projects/spring-framework/blob/main/spring-webmvc/src/main/resources/org/springframework/web/servlet/view/freemarker/spring.ftl),不仅没有启用转义的选项,而且他们故意在那里禁用了转义(?no_esc
):
<#macro url relativeUrl extra...>
<#if extra?? && extra?size!=0>
$springMacroRequestContext.getContextUrl(relativeUrl,extra)?no_esc
<#else>
$springMacroRequestContext.getContextUrl(relativeUrl)?no_esc
</#if>
</#macro>
我不知道为什么。此外,这个东西(连同那里的许多其他宏)应该是#function
,而不是#macro
。然后用户可以完全控制转义,或者他们想要使用结果。 (无论如何,查看源代码很明显,无论是谁做的,都没有投资了解模板语言。)
【讨论】:
以上是关于@spring.url 宏没有转义 HTML的主要内容,如果未能解决你的问题,请参考以下文章