当前位置: 首页 > article >正文

JavaSec-SSTI - 模板引擎注入

简介

SSTI(Server Side Template Injection):模板引擎是一种通过将模板中的占位符替换为实际数据来动态生成内容的工具,如HTML页面、邮件等。它简化了视图层的设计,但如果未对用户输入进行有效校验,可能导致安全风险如任意代码执行 Java中常用的模板引擎有Freemarker、Velocity、Thymeleaf等,在这里以Thymeleaf引擎为例

1.漏洞场景:thymeleaf模版注入

攻击者可以操控return中的值,就有可能造成模板注入漏洞,当方法返回为void时,thymeleaf会以URL路由为视图名称,调用模板视图去解析

缺陷代码

public String vul1(@RequestParam String para, Model model) {// 用户输入直接拼接到模板路径,可能导致SSTI(服务器端模板注入)漏洞return "/vul/ssti/" + para;
}public void vul2(@PathVariable String path) {log.info("SSTI注入:"+path);
}// 缺陷组件版本参考
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>
<!--        <version>2.7.14</version>--><version>2.4.1</version><relativePath/>
</parent><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><version>2.4.1</version>
</dependency>

2.安全场景:thymeleaf模版注入

安全编码规范:1、避免用户输入直接作为模板名称或路径2、对所有动态内容进行严格校验和转义,包括模板变量3、选择支持自动转义的安全模板引擎(如Thymeleaf的th:text)4、使用白名单限制动态渲染的模板,控制可访问的模板范围

public String safe1(String para, Model model) {List<String> white_list = new ArrayList<>(Arrays.asList("vul", "ssti"));if (white_list.contains(para)){return "vul/ssti" + para;} else{return "common/401";}
}
@GetMapping("/safe2/{path}")
public void safe2(@PathVariable String path, HttpServletResponse response) {log.info("SSTI注入:"+path);
}

http://www.lryc.cn/news/2401976.html

相关文章:

  • 基于InternLM的情感调节大师FunGPT
  • 【性能调优系列】深入解析火焰图:从基础阅读到性能优化实战
  • Docker 与容器技术的未来:从 OCI 标准到 eBPF 的演进
  • PLC远程控制网关支持多塘口水环境数据边缘计算与远程安全传输的配置指南
  • 3.3 HarmonyOS NEXT原子化服务开发:卡片设计、轻量部署与场景化编排实战
  • C++11 中 final 和 override 从入门到精通
  • 跨多个微服务使用 Redis 共享数据时,如何管理数据一致性?
  • Linux网络——socket网络通信udp
  • 大数据-275 Spark MLib - 基础介绍 机器学习算法 集成学习 随机森林 Bagging Boosting
  • 大模型微调技术全景图:从全量更新到参数高效适配
  • c++ chrono头文件含义
  • git互联GitHub 使用教程
  • Python爬虫与Java爬虫深度对比:从原理到实战案例解析
  • 汇编语言综合程序设计:子程序、分支与循环深度解析
  • SpringBoot+Mysql实现的停车场收费小程序系统+文档
  • 面向对象进阶 | 深入探究 Java 静态成员与继承体系
  • 人脸识别技术成为时代需求,视频智能分析网关视频监控系统中AI算法的应用
  • 青岛国瑞数据采集网关软件平台:工业互联的智能基石——安全、高效、开放,驱动企业数字化转型
  • Git的由来与应用详解:从Linux内核到现代开发的革命性工具
  • @Prometheus 监控-MySQL (Mysqld Exporter)
  • pc端小卡片功能-原生JavaScript金融信息与节日日历
  • 窗口聚合窗口聚合
  • es在Linux安装
  • Go语言学习-->第一个go程序--hello world!
  • 高雄市12岁以下身心障碍儿童口腔保健合作院所名单数据集
  • Spring Boot 自动参数校验
  • 破局新能源消纳难题!安科瑞智慧能源平台助力10KV配电网重构未来
  • 推荐10个AI视频生成工具网站
  • TIA博途中的程序导出为PDF格式的具体方法示例
  • 【大模型:知识图谱】--4.neo4j数据库管理(cypher语法1)