0%

38安全开发-JavaEE应用-SpringBoot

思维导图

22安全开发

知识点:

  • 44、JavaEE-SpringBoot-WebAPP&路由
  • 45、JavaEE-SpringBoot-Mybatis&注入
  • 46、JavaEE-SpringBoot-Thymeleaf&SSTI

章节点

  • 1、PHP:
    功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等
    技术:输入输出,超全局变量,数据库操作,逻辑架构,包含上传&下载删除;
    技术:JS&CSS混用,Cookie,Session操作,MVC架构,ThinkPHP引用等。
    安全:原生PHP开发安全,模版引用安全,第三方插件安全,TP框架安全等
  • 2、JS:
    功能:登录验证,文件操作,SQL操作,云应用接入,框架开发,打包器使用等
    技术:原生开发,DOM,常见库使用,框架开发(Vue,NodeJS),打包器(Webpack)等
    安全:原生开发安全,NodeJS安全,Vue安全,打包器Webpack安全,三方库安全问题等
  • 3、Java:
    功能:数据库操作,文件操作,序列化数据,身份验证,框架开发,第三方库使用等.
    框架库:MyBatis,SpringMVC,SpringBoot,Shiro,Log4j,FastJson等
    技术:Servlet,Listen,Filter,Interceptor,JWT,AOP,待补充
    安全:SQL注入,RCE执行,反序列化,脆弱验证,未授权访问,待补充
    安全:原生开发安全,第三方框架安全,第三方库安全等,待补充

SpringBoot

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

SpringBoot-Web应用-路由响应

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

  • 1、路由映射
    1
    @RequestMapping @GetMapping等  
  • 2、参数传递
    1
    @RequestParam  
  • 3、数据响应
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    @RestController @Controller  
    @RestController注解相当于@ResponseBody@Controller合在一起的作用。 (需要return时使用)


    @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

  • 1、数据库先创建需操作的数据

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    -pom.xml
    <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>
  • 3、项目配置数据库连接信息

    1
    2
    3
    4
    5
    6
    7
    -application.yml
    spring:
    datasource:
    url: jdbc:mysql://localhost:3306/demo01
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  • 4、创建User类用来操作数据库数据
    -com.example.demo.entity.User
    set get toString方法

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

    1
    2
    3
    4
    5
    6
    -com.example.demo.mapper.UserMapper  
    @Mapper
    public interface UserMapper {
    @Select("select * from admin where id like '%${id}%'")
    public List<User> findAll(Integer id);
    }
  • 6、创建Controller实现Web访问调用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    -com.example.demo.controller.UserController
    @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;
    }
    }

SpringBoot-模版引擎-Thymeleaf

-不安全的模版版本
日常开发中:语言切换页面,主题更换等传参导致的SSTI注入安全问题
漏洞参考:https://mp.weixin.qq.com/s/NueP4ohS2vSeRCdx4A7yOg
(Thymeleaf漏洞参考)
配置application.properties指向模版页面
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
@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>

欢迎关注我的其它发布渠道

-------------本文结束感谢您的阅读-------------