那些須要本身開發的安全需求(服務端)

最近在實施App安全方面的方案,下面是一些思考。有些安全方面的產品須要購買,本文中的卻要本身集成。須要開發的組件不少,因此依我的經驗,簡單作了下分層,不包括App端和主機環境。算法

數據處理

通信層

http協議簡單易懂、使用方便,咱們大多數網絡應用都是基於它開發的。數據展現,移動互聯網已經佔據了大量市場,對於App端開發,已經進入了混合協議的時代。這就是通信層,數據傳輸的通道。小程序

請求可能來自這些地方: 1、APP。 某些移動應用 2、Web端。 大多數網頁請求或者H5 3、小程序。 被封裝的各類調用(大多數要遵循平臺開發方式) 4、開放平臺。 各類SASS、PASS。後端

通信層的破解難度是: Socket(自有二進制協議)>WebSocket(wss、ws等)> Https > Http。安全

通信層的加密主要是提升攻擊者的分析成本,並不可以防護全部的攻擊。通信層獨立的好處是能夠隨時進行交互協議的切換或者升級,並不影響下方的業務與策略。bash

加密層

加密是由調用者和服務者進行約定的一個算法層。目前,有對稱加密與非對稱加密之分。網絡

對稱加密是指維護一個密鑰,解祕方便可經過密鑰還原出被保護的數據。比較流行的對稱加密算法有工具

DES
3DES
AES
複製代碼

對稱加密的密鑰管理比較難,容易被破解,更換起來成本也比較大,但它的速度比非對稱加密快幾個數量級。post

相對應的,非對稱加密是指加密密鑰和解密密鑰不一樣的算法。安全性相對較高,但運行速度比較低。常見的非對稱加密有:加密

RSA(耳熟能詳)
DSA
ECC
複製代碼

這裏插個有趣的事情。某個重要的root私鑰,被倒入到一個專門的小型設備裏。此設備被放入保險箱,保險箱須要四個不一樣的人的密碼才能打開。安全級別很是高。spa

而咱們常說的MD五、SHA1等,並不屬於加密算法。

驗籤層

經過對傳輸的信息進行驗證,咱們就可以判斷信息是否被篡改過。有些信息,好比密碼,即便是簡單的MD5,也比將原文保存下來好得多。

雖然DSA、RSA等,可以對信息進行數字簽名,但咱們經常使用仍是一些摘要算法,也叫作Hash算法。

摘要算法不能對數據進行逆向解密,一般經過加鹽的方式進行摘要保護。常見的摘要算法有:

MD5
SHA1
Bcrypt
複製代碼

值得一提的是Bcrypt,目前應用比較普遍。它的特色是即便是對相同的信息進行摘要,也會生成不一樣的內容,隱蔽性更強。

它的加密結果相似這種,你必定見過:

$2a$10$iRdNmYoINR8QqynemTsP2OzFtM7N5pFPoBFuzAtvR6YBtov4gRt7e
複製代碼

使用上,有些系統喜歡使用多重的摘要算法進行計算,安全性更高一些。但一旦被猜解,就形同虛設。

多重hash:md5(md5(sha1(str))).

業務防禦

但數據仍是可以僞造。業務層須要對傳入的參數進行驗證,進行真正業務意義上的判斷。好比對某些餘額操做,使用MVCC+CAS進行保護等。

請求大部分應該是冪等的,不可以重入。僞造的信息應該可以經過自定義的規則被識別。

掃描工具會掃描一些相似XXE、Struts漏洞之類的,這裏是不少人的天堂。這種,建議仍是買服務吧。

還有最後一道,風控系統。雖然重要,但有能力搞的公司不多,包括一些P2P系統,那就讓子彈多飛一會吧。

我以爲坑多多的優惠券就是業務防禦的範疇。固然還有銀行這種,過後跨省追捕的,屬於武裝業務防禦。

規範

同一類業務交互,一個http請求中既帶有requestbody,又有request params;另外一個請求卻變成了post請求。後端的處理變來變去,就複雜了不少,也不利於排查問題。

此類問題還有傳輸了大量用不到的字段,信息嵌套層次過深,錯誤碼紊亂等。許多故障最後的緣由讓人慾哭無淚。

在通信層上,某些規範是很是重要的,值得花心思進行設計。

開發模式

開發模式是你給本身留的後門。

通過各類加密,驗籤,重入防禦等組件的保護,你的系統安全性可能已經很高了。高到連你本身也被防禦住了。

當你須要人工構造一些請求的時候,就會知道它的威力。經過某些開關或者灰度,可讓你略過某些環節,直接開展對主因的分析,提升驗證的效率。

詳盡的日誌是系統遇到問題時強有力的幫手,當業務流程分支多而長的時候,調用鏈能顯著加快問題的處理速度。在設計伊始,便要考慮對這些功能的集成與配置,以便對關鍵環節進行調優。

End

安全很重要,售賣靠忽悠。可是不買也是要受傷害的,仍是花錢。買平安。

相關文章
相關標籤/搜索