SSTI(Server Side Template Injection):模板引擎是一种通过将模板中的占位符替换为实际数据来动态生成内容的工具,如HTML页面、邮件等。它简化了视图层的设计,但如果未对用户输入进行有效校验,可能导致安全风险如任意代码执行 Java中常用的模板引擎有Freemarker、Velocity、Thymeleaf等,在这里以Thymeleaf引擎为例
SSTI(Server Side Template Injection):模板引擎是一种通过将模板中的占位符替换为实际数据来动态生成内容的工具,如HTML页面、邮件等。它简化了视图层的设计,但如果未对用户输入进行有效校验,可能导致安全风险如任意代码执行
Java中常用的模板引擎有Freemarker、Velocity、Thymeleaf等,在这里以Thymeleaf引擎为例
攻击者可以操控return中的值,就有可能造成模板注入漏洞 Run
攻击者可以操控return中的值,就有可能造成模板注入漏洞
当方法返回为void时,thymeleaf会以URL路由为视图名称,调用模板视图去解析 Run
当方法返回为void时,thymeleaf会以URL路由为视图名称,调用模板视图去解析
text/html:浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理 Run
text/html:浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理
高版本SpringBoot/Thymeleaf不存在模板注入问题,这里SpringBoot版本为2.4.1,Thymeleaf同上
基于白名单的路径校验 Run
基于白名单的路径校验
控制器返回为void,方法参数设置为HttpServletResponse后,Spring MVC会跳过视图解析过程 Run
控制器返回为void,方法参数设置为HttpServletResponse后,Spring MVC会跳过视图解析过程
安全编码规范: 1、避免用户输入直接作为模板名称或路径 2、对所有动态内容进行严格校验和转义,包括模板变量 3、选择支持自动转义的安全模板引擎(如Thymeleaf的th:text) 4、使用白名单限制动态渲染的模板,控制可访问的模板范围