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

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.xdnf.cn/news/12168.html

相关文章:

  • 【ArcGIS应用】ArcGIS‌应用如何进行影像分类?
  • adb 连不上真机设备问题汇总
  • ros2--图像/image
  • halcon c# 自带examples报错 Matching
  • JVM中的各类引用
  • 设计模式域——软件设计模式全集
  • GIC流协议接口
  • android 之 Tombstone
  • 巴科斯-诺尔范式与抽象语法树:CMake语法实例教程
  • 深入学习RabbitMQ队列的知识
  • RabbitMQ实用技巧
  • 18650锂电池组点焊机:高效组装锂电池的关键工具|比斯特自动化
  • c++ openssl 使用 DES(数据加密标准)进行加密和解密的基本操作
  • ​减少交通拥堵、提高效率、改善交通安全的智慧交通开源了。
  • c++算法学习4——广度搜索bfs
  • html文字红色粗体,闪烁渐变动画效果,中英文切换版本
  • 【Linux手册】冯诺依曼体系结构
  • buuctf——web刷题第二页
  • 自定义Spring Boot Starter的全面指南
  • 解决el-select选择框右侧下拉箭头遮挡文字问题
  • 自建 Derp 中继节点
  • golang 如何定义一种能够与自身类型值进行比较的Interface
  • 【论文解读】MemGPT: 迈向为操作系统的LLM
  • 13.4 AI颠覆语言学习:预录制视频+GPT-4评估如何实现60%成本降低与40%留存飙升
  • 阿里云域名怎么绑定
  • Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
  • React---day9
  • Python爬虫与Java爬虫深度对比:从原理到实战案例解析
  • 用函数实现模块化程序设计(适合考研、专升本)
  • 自定义注解facade 实现切面 进行日志记录和参数校验