完整步驟如下:
1、 前端開啟
h52、 前端生成乙個aes金鑰,用通訊金鑰(公鑰)對其做rsa加密,獲得加密後的aes金鑰為encode_key。
3、
前端將所有業務引數組裝成json字串,上傳引數名為fieldvals
4、
前端將業務引數整體
json
串fieldvals
以及其他公共引數按照引數名字進行排序,以
value:key
的方式乙個乙個用「
|」拼接起來,然後把拼接串前後用括號括起來,接著對其整體做
sha1
加密(其中sha1的加密密碼為aes金鑰明文),從而獲得數字簽名
signture。
偽**:
sha1
((value1:key1|value2:key2|value3:key3))
5、 前端用aes金鑰對fieldvals做aes加密,base64 encode, url encode得到encodefieldvals。(前端應該支援根據url配置或引數名字過濾兩種加密策略)
6、 encode_key, fieldvals或encodefieldvals,signture以及其他公共引數上傳到後端介面(post)。(注意有敏感資訊的情況上傳encodefieldvals,無敏感資訊的情況下上傳fieldvals, 兩者只上傳乙個)。
7、 後端用通訊金鑰(私鑰)對encode_key 進行rsa解密得到aes金鑰。
9、
後端把接收到的所有引數
按照引數名字進行排序
(signture,encodefieldvals除外),以
value:key
的方式乙個乙個用「
|」拼接起來,然後把拼接串前後用括號括起來,接著整體做
sha1
加密(其中sha1的加密密碼為aes金鑰明文),得到的值與
signture
做比對,如果不相等,說明被篡改直接返回前端。否則繼續下一步。
10、後端獲取公共引數timestamp,拿伺服器系統時間減去timestamp,看是否超過5分鐘,如果超過說明請求已經失效,直接返回前端,否則繼續下一步。
11、 後端獲取公共引數requestid(由前端每次請求生成並且保證唯一),檢查伺服器快取中是否已經存在此requestid,如果已經存在,證明是重放請求,直接返回前端,否則將此requestid快取起來,5分鐘失效,繼續下一步。
13、 後端執行業務處理邏輯。
14、 後端對業務處理返回的結果物件進行遍歷,進行xss指令碼過濾處理。
15、 後端獲取結果物件中的data部分,並轉換為json字串,然後用aes金鑰進行加密得到encodefieldvals,把encodefieldvals設定到結果物件中,同時清空data。(後端應該支援根據url配置或引數名字過濾兩種加密策略)
16、 後端返回前端結果物件。
17、 前端拿到結果物件,獲取encodefieldvals部分,用aes金鑰進行解密,得到json字串,然後轉換成json資料物件,接下來做後續處理。
說明:1、 encode_key,登陸區外需要敏感資訊加密的介面必傳,登陸區內介面不需要傳,因為登陸時已儲存在會話中,登陸區內可共享。
2、 敏感資訊加解密、防重放,不是所有介面都做,可以通過配置對某些介面生效。
敏感資訊加密支援對包含某些欄位的報文進行自動加密。
前端負責對上送給後端的敏感資訊進行加密,對後端返回來的敏感資訊進行解密。
後端負責對前端上送的敏感資訊進行解密,對返回給前端的敏感資訊進行加密。
3、 增加clienttype公共字段,傳值為h5 用來區分native, h5, pc
4、 公共引數裝置號之類的
5、 請參照native公共引數的傳遞方式,把公共引數放在url之後傳遞。
fieldvals,encodefieldvals業務引數需要post過來。
socket 客戶端和服務端通訊
客戶端要連線伺服器 首先要知道伺服器的ip位址。而伺服器裡有很多的應用程式,每乙個應用程式對應乙個埠號 所以客戶端想要與伺服器中的某個應用程式進行通訊就必須要知道那個應用程式的所在伺服器的ip位址,及應用程式所對應的埠號 首先建立乙個解決方案,在解決方案下建立乙個 socket通訊 windows窗...
客戶端和服務端之間的通訊(TCP)
和上篇的 客戶端和服務端之間的通訊 udp 程式類似 socket最初應用於unix當中,代表了一種檔案描述符 在unix中一切都是以檔案為單位的 在windows當中則用於描述網路的訪問,程式設計師通過socket來傳送和接收網路中的資訊,因此我們可以把它理解為是乙個跟網絡卡互動的api介面函式。...
客戶端和服務端之間的通訊(UDP)
實現乙個小的通訊功能 客戶端向服務端提交資料,然後服務端回執資料。一 新建乙個控制台應用程式 client。view code using system using system.collections.generic using system.linq using system.text usin...