首页 > Windows开发 > 详细

3-2 第一个API及注入攻击防护

时间:2019-11-06 23:41:50      阅读:153      评论:0      收藏:0      [点我收藏+]

先来写一些用户的基础数据的管理的api。就是用户的基本的增删改查。用spring boot可以很容易的写出这种api
技术分享图片
首先新建maven的项目
技术分享图片

技术分享图片

依赖关系

引入依赖。用最新的spring boot
技术分享图片
技术分享图片

技术分享图片
https://docs.spring.io/spring-boot/docs/2.2.0.RELEASE/reference/html/
技术分享图片
https://docs.spring.io/spring-boot/docs/2.2.0.RELEASE/reference/html/using-spring-boot.html#using-boot-dependency-management
搜索关键字maven。找到这里
技术分享图片
复制这段
技术分享图片
复制到项目里pom.xml内。有了这个依赖。以后在引入各种依赖的时候就不用再去写版本号了。因为dependencyManagement已经替我们把版本号规定好了。
技术分享图片

<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.2.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

我们要写一个web项目来提供http服务。输入starter-web来搜索
技术分享图片

为什么eclipse能显示effective pom

https://zhidao.baidu.com/question/401757501.html
m4eclipse插件实现的。
获取maven完整/实际/生效(effective)的pom.xml文件
https://blog.csdn.net/iteye_15147/article/details/82567934

继续代码

搜到这个复制下来
技术分享图片
拷贝到,dependencies这个标签里面
技术分享图片
然后把版本号去掉
技术分享图片

开始web项目

技术分享图片
新建一个包
技术分享图片

技术分享图片
创建启动类
技术分享图片
技术分享图片

新建user包

技术分享图片
技术分享图片
新加user类
技术分享图片
user类里面有两个属性id和name
技术分享图片

再搜索lombok的包,这里搜索一下
技术分享图片
复制到项目,然后去掉版本号
技术分享图片
@Data注解等价于加上这些注解。自动为这个pojo(持久化类)类里面的属性生成getter方法、setter方法、全参数的构造函数、覆盖Object里面的ToString方法、副高Equals和HashCode方法
技术分享图片

userController

技术分享图片

技术分享图片
先不写业务逻辑,先把所有的方法声明
增删改查的方法
技术分享图片
查一组用户的方法
技术分享图片

了解攻击

2017年top10的攻击
技术分享图片
第一名是注入攻击。最常见的是sql注入。

例子演示sql注入攻击

引入jdbc

sql注入就肯定就需要做jdbc的操作。搜一下 jdbc的库。
技术分享图片

技术分享图片
技术分享图片
配置数据库相关的参数
技术分享图片

技术分享图片

现在用的驱动默认是MySql8的。所以下面用的这里的驱动名称要注意一下。叫做cj.jdbc.Driver 这个是MySql8的新的驱动类的名字
技术分享图片
搜索mysql的驱动也加上
技术分享图片
最终保留

技术分享图片

建数据库表

就表字段
技术分享图片
技术分享图片

加几条测试数据
技术分享图片

controller内数据库查询

查询user表,先注入jdbcTemplate
技术分享图片

技术分享图片
运行程序测试
技术分享图片
在http的工具请求
技术分享图片
name不写是查不到东西
技术分享图片

技术分享图片
这样就把系统的所有用户都查询到了。这个是sql的注入工具
技术分享图片
程序加断点跟踪。or 1=1是永远都满足的条件。
技术分享图片

首先输入的参数要做输入的校验,写一个正则表达式去判断参数 。另外一种是控制数据库的用户的权限。
root用户什么都能干。应该用一个其他的用户 不能拥有所有数据库的权限。
技术分享图片
用一些比较先进的数据库操作的库 例如JPA、 Mybatis。为什么不用Mybaits呢因为也有被sql注入的风险。使用的时候依然要有一些注意的事项。
JPA基本上没有这个风险。
技术分享图片

使用Spring JPA

引入依赖
技术分享图片
配置文件内加上jpa相关的配置
如果在这个User对象里面加属性的话,会自动的往数据库内加字段。如果新建别的对象,那么数据库就会自动多出来一张表来。就会保持对象和数据库的同步。开发的时候挺方便的。但是一般生产的时候不要这么用。
技术分享图片
在日志里可以看到JPA最终执行的sql
技术分享图片

User类加上Entity注解,这样这个pojo类就和数据库的表做了绑定。
技术分享图片
加一个id直接告诉jpa。id这个属性书主键。
技术分享图片
写一个接口。UserRepository。就是数据操作的对象。用来操作我们的User对象。操作User对象就是操作我们的User表。
技术分享图片
继承这个接口,用来做一些动态的查询
技术分享图片
创建一个基本的增删改查的接口。Long表示主键的类型
技术分享图片

继续Controller代码

注入Repository
技术分享图片

技术分享图片

这个方法,我们直接把他声明在接口内

技术分享图片
技术分享图片

运行测试

技术分享图片

执行结果为空
技术分享图片
技术分享图片
功能实现了 同时防止了sql注入攻击来盗取我们数据库内的数据

日志里面输出的sql语句
技术分享图片

结束



 

3-2 第一个API及注入攻击防护

原文:https://www.cnblogs.com/wangjunwei/p/11809280.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!