3-2 第一個API及注入攻擊防禦

先來寫一些用戶的基礎數據的管理的api。就是用戶的基本的增刪改查。用spring boot能夠很容易的寫出這種api

首先新建maven的項目


html

依賴關係

引入依賴。用最新的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已經替咱們把版本號規定好了。
mysql

<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來搜索
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這個標籤裏面

而後把版本號去掉
spring

開始web項目


新建一個包



建立啓動類

sql

新建user包



新加user類

user類裏面有兩個屬性id和name


再搜索lombok的包,這裏搜索一下

複製到項目,而後去掉版本號

@Data註解等價於加上這些註解。自動爲這個pojo(持久化類)類裏面的屬性生成getter方法、setter方法、全參數的構造函數、覆蓋Object裏面的ToString方法、副高Equals和HashCode方法
數據庫

userController




先不寫業務邏輯,先把全部的方法聲明
增刪改查的方法

查一組用戶的方法
api

瞭解攻擊

2017年top10的攻擊

第一名是注入攻擊。最多見的是sql注入。eclipse

例子演示sql注入攻擊

引入jdbc

sql注入就確定就須要作jdbc的操做。搜一下 jdbc的庫。




配置數據庫相關的參數




如今用的驅動默認是MySql8的。因此下面用的這裏的驅動名稱要注意一下。叫作cj.jdbc.Driver 這個是MySql8的新的驅動類的名字

搜索mysql的驅動也加上

最終保留

maven

建數據庫表

就表字段



加幾條測試數據

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語句

結束

相關文章
相關標籤/搜索