自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

前后端交互如何保證數(shù)據(jù)安全?

安全 應(yīng)用安全 網(wǎng)絡(luò)管理
前后端的交互如果做到以上使用https,對請求加解密以及對請求參數(shù)進行驗簽,基本上能解決大部分問題,但除此之外我們還應(yīng)該做到對每個接口進行身份校驗,確保該接口只能由特定的用戶訪問,或者該筆數(shù)據(jù)只能由特定的用戶去進行修改。

前言

前后端交互如何保證安全性?

web與后端,andorid與后端,ios與后端,像這種類型的交互其實就屬于典型的前端與后端進行交互。在與B端用戶進行交互的過程中,我們通常忽略了其安全性(甚至從未考慮安全性)。比如,請求和響應(yīng)數(shù)據(jù)的明文傳輸,對接口并沒有做嚴(yán)格的身份校驗。如果我們還是按照這種思路去做C端用戶的交互,那么等待著必將是血淋淋的教訓(xùn)。接下來,我?guī)ьI(lǐng)大家如何在與C端用戶安全的進行交互。

保證安全性的幾種方式

前后端安全性的交互,大致可以分成如下幾類:

  • 通信請求使用https
  • 對請求參數(shù)進行簽名,防止數(shù)據(jù)被踹改
  • 對請求參數(shù)以及響應(yīng)進行加密解密處理
  • APP中使用ssl pinning防止抓包操作

使用https

谷歌 Chrome 在18年七月份已經(jīng)將所有的 HTTP 網(wǎng)站標(biāo)記為“不安全”。并且已經(jīng)有越來越多的第三方服務(wù)開始推薦甚至是強制要求使用 HTTPS 連接方式,比如現(xiàn)在用得特別多的微信登錄、微信支付、短信驗證碼、地圖 API 等等,又比如蘋果公司 2016 年在 WWDC 上宣稱,公司希望官方應(yīng)用商店中的所有 iOS App 都使用安全的 HTTPS 鏈接與服務(wù)器進行通信。

那為什么越來越多的 HTTP 都在逐漸 HTTPS 化?HTTP 協(xié)議(超文本傳輸協(xié)議)是客戶端瀏覽器或其他程序與 Web 服務(wù)器之間的應(yīng)用層通信協(xié)議;HTTPS 協(xié)議可以理解為 HTTP+SSL/TLS, 即 HTTP 下加入 SSL 層,HTTPS 的安全基礎(chǔ)是 SSL,因此加密的詳細(xì)內(nèi)容就需要 SSL,用于安全的 HTTP 數(shù)據(jù)傳輸,http與https的區(qū)別如下圖所示:

前后端交互如何保證安全性?

不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文傳播,帶來了三大風(fēng)險。

  • 竊聽風(fēng)險(eavesdropping):第三方可以獲知通信內(nèi)容。
  • 篡改風(fēng)險(tampering):第三方可以修改通信內(nèi)容。
  • 冒充風(fēng)險(pretending):第三方可以冒充他人身份參與通信。

SSL/TLS協(xié)議是為了解決這三大風(fēng)險而設(shè)計的,希望達(dá)到:

  • 所有信息都是加密傳播,第三方無法竊聽。
  • 具有校驗機制,一旦被篡改,通信雙方會立刻發(fā)現(xiàn)。
  • 配備身份證書,防止身份被冒充。

因此強烈建議,為了你的系統(tǒng)安全性,趕快切到https中去吧。

對請求進行簽名

我們先來看一個例子,假設(shè)用戶在下完單之后,可以更改訂單的狀態(tài),用戶對后端發(fā)起請求 /user?orderId=123, 假設(shè)后端剛好也沒有對這筆訂單的身份進行驗證,那么后果就是,我們根據(jù)orderId, 將這筆訂單的狀態(tài)進行了修改:

前后端交互如何保證安全性?前后端交互如何保證安全性?

如果這時候,嘗試著將請求中的orderId 換成另外一個orderId, 也會同樣對這筆訂單做了修改,從安全角度來說這是我們不希望看到的,當(dāng)然我們也可以加一下身份校驗,判斷該筆訂單是否屬于當(dāng)前的用戶;除此之外,我們還應(yīng)該對請求參數(shù)做一次簽名處理。

加簽和驗簽就是在請求發(fā)送方將請求參數(shù)通過加密算法生成一個sign值,放到請求參數(shù)里;請求接收方收到請求后,使用同樣的方式對請求參數(shù)也進行加密得到一個sign值,只要兩個sign值相同,就說明參數(shù)沒有被篡改。

簽名參數(shù)sign生成的方法

將所有以頭參數(shù)(注意時所有參數(shù)),出去sign本身,以及值是空的參數(shù),按參數(shù)鍵字母升序排序。

然后把排序后的參數(shù)按參數(shù)1值1參數(shù)2值2......參數(shù)n值n(這里的參數(shù)和值必須是傳輸參數(shù)的原始值,不能是經(jīng)過處理的,如不能將"轉(zhuǎn)成"后再拼接)的方式拼接成一個字符串。

把分配給接入方的驗證密鑰key拼接在第2步得到的字符串前面。

在上一步得到的字符串前面加上密鑰key(這里的密鑰key是接口提供方分配給接口接入方的),然后計算md5值,得到32位字符串,然后轉(zhuǎn)成大寫,得到的字符串作為sign的值放到請求參數(shù)里。

舉例

現(xiàn)在假設(shè)需要傳輸?shù)臄?shù)據(jù):/guest/rechargeNotify?p2=v2&p1=v1&method=cancel&p3=&pn=vn(實際情況最好是通過post方式發(fā)送)

  • 拼接字符串,首先去除值是空的參數(shù)p3,剩下p2=v2&p1=v1&method=cancel&pn=vn,然后按參數(shù)名字符升序排序得到字符串:method=cancel&p1=v1&p2=v2&pn=vn。
  • 然后做參數(shù)名和值的拼接,最后得到methodcancelp1v1p2v2pnvn。
  • 在上面拼接得到的字符串前面加上驗證密鑰key,假設(shè)是abc,得到新的字符串a(chǎn)bcmethodcancelp1v1p2v2pnvn。
  • 將上面得到的字符串進行md5計算,假設(shè)得到的是abcdef,然后轉(zhuǎn)為大寫,得到ABCDEF這個值即為sign簽名值。最終產(chǎn)生的url應(yīng)該如下:/guest/rechargeNotify?p2=v2&p1=v1&method=cancel&p3=&pn=vn&sign=ABCDEF
  • 注意:計算md5之前請確保請求發(fā)送方和接收方使用的字符串編碼一致,比如統(tǒng)一使用utf-8編碼,如果編碼方式不一致則計算出來的簽名會校驗失敗。

驗簽過程

其實就是將請求url按照上述的規(guī)則進行同樣的操作,計算得到參數(shù)的簽名值,然后和參數(shù)中傳遞的sign值進行對比,如果一致則校驗通過,否則校驗不通過。

對請求和響應(yīng)進行加解密

可能有人會問,都使用了https了,為什么還要對請求和響應(yīng)再做一次加解密,因為有些第三方抓包工具,例如Charles 通過某些手段是可以抓取https的明文的,因此對一些敏感數(shù)據(jù),我們需要進行加密處理,常見的加解密方式有AES 對成加密方式和RSA非對成方式,至于如何運用,可以參考https的原理,有點復(fù)雜,不過可以簡單分成如下幾步:

前后端交互如何保證安全性?前后端交互如何保證安全性?

  • 服務(wù)器端有一個密鑰對,即公鑰和私鑰,是用來進行非對稱加密使用的,服務(wù)器端保存著私鑰,不能將其泄露,公鑰可以發(fā)送給任何人。
  • 服務(wù)器將自己的公鑰發(fā)送給客戶端。
  • 客戶端收到服務(wù)器端的公鑰之后,會對公鑰進行檢查,驗證其合法性,如果發(fā)現(xiàn)發(fā)現(xiàn)公鑰有問題,那么HTTPS傳輸就無法繼續(xù)。嚴(yán)格的說,這里應(yīng)該是驗證服務(wù)器發(fā)送的數(shù)字證書的合法性,關(guān)于客戶端如何驗證數(shù)字證書的合法性,下文會進行說明。如果公鑰合格,那么客戶端會生成一個隨機值,這個隨機值就是用于進行對稱加密的密鑰,我們將該密鑰稱之為client key,即客戶端密鑰,這樣在概念上和服務(wù)器端的密鑰容易進行區(qū)分。然后用服務(wù)器的公鑰對客戶端密鑰進行非對稱加密,這樣客戶端密鑰就變成密文了,至此,HTTPS中的第一次HTTP請求結(jié)束。
  • 客戶端會發(fā)起HTTPS中的第二個HTTP請求,將加密之后的客戶端密鑰發(fā)送給服務(wù)器。
  • 服務(wù)器接收到客戶端發(fā)來的密文之后,會用自己的私鑰對其進行非對稱解密,解密之后的明文就是客戶端密鑰,然后用客戶端密鑰對數(shù)據(jù)進行對稱加密,這樣數(shù)據(jù)就變成了密文。
  • 然后服務(wù)器將加密后的密文發(fā)送給客戶端。
  • 客戶端收到服務(wù)器發(fā)送來的密文,用客戶端密鑰對其進行對稱解密,得到服務(wù)器發(fā)送的數(shù)據(jù)。

總結(jié)

前后端的交互如果做到以上使用https,對請求加解密以及對請求參數(shù)進行驗簽,基本上能解決大部分問題,但除此之外我們還應(yīng)該做到對每個接口進行身份校驗,確保該接口只能由特定的用戶訪問,或者該筆數(shù)據(jù)只能由特定的用戶去進行修改。

責(zé)任編輯:趙寧寧 來源: 架構(gòu)師之巔
相關(guān)推薦

2019-12-04 07:12:41

前端后端web安全

2019-04-09 10:35:14

API數(shù)據(jù)安全性

2019-07-03 10:51:54

數(shù)據(jù)庫技術(shù)服務(wù)器

2018-10-23 14:24:10

2021-09-03 07:39:44

數(shù)據(jù)交互AxiosAjax

2013-08-20 09:26:03

大數(shù)據(jù)時代hadoop

2017-11-03 13:48:59

ERP信息化數(shù)據(jù)

2022-04-22 16:11:12

區(qū)塊鏈數(shù)據(jù)安全去中心化

2019-10-15 11:19:56

數(shù)據(jù)中心云計算互聯(lián)網(wǎng)

2021-11-11 11:26:43

云計算數(shù)據(jù)安全云安全

2018-06-25 09:48:00

數(shù)據(jù)安全云服務(wù)

2024-05-15 16:54:04

2019-06-12 19:00:14

前后端分離AppJava

2011-09-23 10:13:43

2024-06-17 00:02:00

線程安全HashMapJDK 1.7

2021-05-26 08:49:15

API接口安全

2023-01-26 02:07:51

HashSet線程安全

2011-03-31 09:40:46

2023-07-13 07:35:19

2009-04-09 21:56:14

點贊
收藏

51CTO技術(shù)棧公眾號