【038-安全开发篇】JavaEE应用&SpringBoot框架&MyBatis注入&Thymeleaf模版注入

思维导图


知识点:

1、JavaEE-SpringBoot-WebAPP&路由

2、JavaEE-SpringBoot-Mybatis&注入

3、JavaEE-SpringBoot-Thymeleaf&SSTI

章节点

3、Java:

功能:数据库操作,文件操作,序列化数据,身份验证,框架开发,第三方库使用等.

框架库:MyBatis,SpringMVC,SpringBoot,Shiro,Log4j,FastJson等

技术:Servlet,Listen,Filter,Interceptor,JWT,AOP,反射机制待补充

安全:SQL注入,RCE执行,反序列化,脆弱验证,未授权访问,待补充

安全:原生开发安全,第三方框架安全,第三方库安全等,待补充

复制代码
演示案例:
SpringBoot-Web应用-路由响应
SpringBoot-数据库应用-Mybatis
SpringBoot-模版引擎-Thymeleaf

Spring Boot是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能,降低了复杂性,同时支持基于JVM的多种开源框架,可以缩短开发时间,使开发更加简单和高效。

SpringBoot-Web应用-路由响应

参考:https://springdoc.cn/spring-boot/

1、路由映射
@RequestMapping @GetMapping

2、参数传递
@RequestParam

3、数据响应
@RestController @Controller
@RestController注解相当于@ResponseBody+@Controller合在一起的作用。

java 复制代码
@RestController
public class HelloController {
    //无参数访问响应
    @RequestMapping("/xiaodi")
    public String hello() {
        return "hello xiaodi";
    }
    //无参数指向GET方法访问响应
    @RequestMapping(value = "/get",method = RequestMethod.GET)
    public String helloGet(){
        return "hello get xiadi";
    }
    //有参数指向GET方法访问响应
    @RequestMapping(value = "/getp",method = RequestMethod.GET)
    public String hellogetp(String name){
        return "hello get "+name;
    }
    //有参数指向POST方法访问响应
    @RequestMapping(value = "/getpost",method = RequestMethod.POST)
    public String helloGetParameters(String name){
        return "hello POST "+name;
    }
}

SpringBoot-数据库应用-Mybatis

操作步骤:

0、数据库先创建需操作的数据

1、项目添加Mybatis&数据库驱动

-pom.xml

java 复制代码
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

2、项目配置数据库连接信息

-application.yml

java 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo01
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

3、创建User类用来操作数据库数据

-com.example.demo.entity.User

java 复制代码
set get toString方法

4、创建Mapper动态接口代理类实现

-com.example.demo.mapper.UserMapper

java 复制代码
@Mapper
public interface UserMapper {
    @Select("select * from admin where id   like '%${id}%'")//模糊查询,有安全危险
    public List<User> findAll(Integer id);
}

5、创建Controller实现Web访问调用

-com.example.demo.controller.UserController

java 复制代码
@RestController
public class UserController {
    @Autowired
    private UserMapper userMapper;
    @RequestMapping(value = "/getdata",method = RequestMethod.GET)
    //@ResponseBody
    public List<User> getdata(Integer id) {
        List<User> all = userMapper.findAll(id);
        System.out.println(all);
        return all;
    }
}

可以在csdn搜索mybatis中SQL注入的文章,虽然有这种漏洞的可能性小,但是还是有可能

SpringBoot-模版引擎-Thymeleaf

配置application.properties指向模版页面

spring.thymeleaf.prefix=classpath:/templates/

spring.thymeleaf.suffix=.html

java 复制代码
@RequestMapping(value = "/")
public String index(Model model) {
    model.addAttribute("data","hello xiaodi");
    return "index";
}
@GetMapping("/path")
public String thymeleaf(String lang) {
    return lang;
}

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>java-spring-thymeleaf</artifactId>
    <version>1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <!--latest-->
        <version>2.2.0.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
相关推荐
HackTorjan9 小时前
深度神经网络的反向传播与梯度优化原理
人工智能·spring boot·神经网络·机器学习·dnn
BenSmith12 小时前
从零上手嵌入式 RTOS:以 Raspberry Pi Pico 2 WH 为例的烧录、定制构建与多系统对比指南
安全
汇智信科13 小时前
训练安全管理系统:赋能军消装备训练,实现全流程智能化管控
安全·训练安全管理·装备训练智能化·军事训练保障·消防训练管理
其实防守也摸鱼16 小时前
CTF密码学综合教学指南--第三章
开发语言·网络·python·安全·网络安全·密码学
其实防守也摸鱼16 小时前
CTF密码学综合教学指南--第四章
网络·笔记·安全·网络安全·密码学·ctf
DevilSeagull16 小时前
电脑上安装的服务会自动消失? 推荐项目: localhostSCmanager. 更好管理你的服务!
测试工具·安全·react·vite·localhost·hono·trpc
@insist12317 小时前
信息安全-防火墙技术演进全景:从代理NAT 到下一代及专项防火墙
网络·安全·web安全·软考·信息安全工程师·软件水平考试
不会编程的懒洋洋18 小时前
C# P/Invoke 基础
开发语言·c++·笔记·安全·机器学习·c#·p/invoke
直奔標竿18 小时前
Java开发者AI转型第二十五课!Spring AI 个人知识库实战(四)——RAG来源追溯落地,拒绝AI幻觉
java·开发语言·人工智能·spring boot·后端·spring
时空系19 小时前
第10篇:归属权与借用——Rust的安全保障 Rust中文编程
开发语言·安全·rust