前後端API互動如何保證資料安全性?
阿新 • • 發佈:2020-09-04
# 前言
前後端分離的開發方式,我們以介面為標準來進行推動,定義好介面,各自開發自己的功能,最後進行聯調整合。無論是開發原生的APP還是webapp還是PC端的軟體,只要是前後端分離的模式,就避免不了呼叫後端提供的介面來進行業務互動。
網頁或者app,只要抓下包就可以清楚的知道這個請求獲取到的資料,這樣的介面對爬蟲工程師來說是一種福音,要抓你的資料簡直輕而易舉。
資料的安全性非常重要,特別是使用者相關的資訊,稍有不慎就會被不法分子盜用,所以我們對這塊要非常重視,容不得馬虎。
# 如何保證API呼叫時資料的安全性?
1. 通訊使用https
2. 請求籤名,防止引數被篡改
3. 身份確認機制,每次請求都要驗證是否合法
4. APP中使用ssl pinning防止抓包操作
5. 對所有請求和響應都進行加解密操作
6. 等等方案…….
# 對所有請求和響應都進行加解密操作
方案有很多種,當你做的越多,也就意味著安全性更高,今天我跟大家來介紹一下對所有請求和響應都進行加解密操作的方案,即使能抓包,即使能呼叫我的介面,但是我返回的資料是加密的,只要加密演算法夠安全,你得到了我的加密內容也對我沒什麼影響。
像這種工作最好做成統一處理的,你不能讓每個開發都去關注這件事情,如果讓每個開發去關注這件事情就很麻煩了,返回資料時還得手動呼叫下加密的方法,接收資料後還得呼叫下解密的方法。
為此,我基於Spring Boot封裝了一個Starter, 內建了AES加密演算法。GitHub地址如下:
https://github.com/feifuzeng/spring-boot-starter-encrypt
## 入門使用
1. 下載原始碼並在專案工程中引入
2. 在啟動類上增加加解密註解
在啟動類上增加@EnableEncrypt註解開啟加解密操作:
```java
@EnableEncrypt
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
```
3. 配置檔案增加配置
```properties
spring.encrypt.key=abcdef0123456789
spring.encrypt.debug=false
```
> spring.encrypt.key:加密key,必須是16位
spring.encrypt.debug:是否開啟除錯模式,預設為false,如果為true則不啟用
4. 加解密操作
為了考慮通用性,不會對所有請求都執行加解密,基於註解來做控制
響應資料需要加密的話,就在Controller的方法上加@Encrypt註解即可。
```java
@Encrypt
@RequestMapping("/list")
@ResponseBody
public List