SpringCloud微服务安全API安全 2-2 注入攻击防护
Posted 鮀城小帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud微服务安全API安全 2-2 注入攻击防护相关的知识,希望对你有一定的参考价值。
1. 创建 API
1.1 创建 SpringBoot 工程 this-user-api
1.2 创建实体类 User
@Entity
@Data
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)// 指定该属性为底层数据库的主键策略
private Long id;
@Column
private String name;
@Column(unique = true)
@NotBlank(message = "用户名不能为 null")
private String username;
@Column
@NotBlank(message = "密码不能为null")
private String password;
public UserInfo buildInfo(){
UserInfo info = new UserInfo();
BeanUtils.copyProperties(this,info);
return info;
}
}
该工程引入 lombok 。
1.3 定义数据库 user
CREATE TABLE `imooc-security`.`user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
1.4 创建增、删、改、查四个 API 接口
2. 启动程序、测试
测试工具: google 安装 aejoelaoggembcahagimdiliamlcdmfm_25.7.0_chrome.zzzmh.cn 插件
2.1 正常查询
(1)访问API
返回当前查询的 name = jojo1 的用户信息
2.2 SQL注入攻击演示
(1)注入攻击查询
查询结果:
2.3 Debug 调试 SQL 注入攻击的原因
在代码中可以看出,name='or 1=1 or name= ' 被处理后直接拼接到了 where 子句中成为了 where name=' ' or 1=1 or name = '' , 由于判断语句 or 1=1 恒成立,所以结果为真,直接查询所有的用户信息。
2.4 解决方案
方案1:使用#{id}占位符的预防来设置值,可以有效防止SQL注入。
方案2:使用 Spring Data JPA ,其底层自动做了防止SQL注入的机制
本节主要讲了sql注入防范,如果使用mybatis,需要注意mapper.xml里面$会造成sql注入风险。
以上是关于SpringCloud微服务安全API安全 2-2 注入攻击防护的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud微服务安全实战API安全 3-9 总结