轉載 | 身份管理的15個安全開發實踐

應用或服務的安全編碼很重要,但若事關處理我的數據的系統,那就不只僅是重要,而是相當重要了。php

img

軟件分析公司CAST分析了1380個軟件應用,在代碼中發現了驚人的130萬個漏洞。html

有點網絡安全常識的人都知道,軟件漏洞就是向網絡罪犯敞開的大門。前端

身份管理能夠說是全部技術門類中風險最大的服務。身份盜竊事件常伴咱們左右。諮詢公司 Javelin Research 從事身份盜竊事件研究多年,其《2018身份欺詐》報告將2017年身份盜竊統計數據描述爲「歷史新高」,揭示身份盜竊繼續困擾着這個行業。git

身份管理中咱們常會談及所謂「武器化身份」的概念,也就是強化系統中的接入點和用戶與服務交互的位置。然而,武器化過程需分層實施,而其中一層就是代碼層。github

身份管理安全編碼

數字身份平臺可能會很是複雜,由於這些平臺每每得依賴外部數據源,並與第三方API集成。消費級身份與訪問管理(IAM)甚至更爲複雜。這類平臺須要擴展功能來上傳、存儲和共享文檔與圖片。不少身份服務還融入移動設備App,或者說徹底基於移動App。依靠身份生態系統各組件間通訊所用協議的固有安全是不夠的。此類生態系統的底層代碼必須儘量安全,同時又不能對其功能形成影響。數據庫

開發身份平臺時能夠採用以下幾種最佳安全編碼實踐:編程

1. 使用良好資源segmentfault

從安全編碼入門經典資源開始。開放網絡應用安全計劃(OWASP)是安全編碼實際上的入門資源。其安全編碼「快速參考指南」是個極好的起始點,可做爲開發過程當中的複覈工具使用。放心充分利用他們的資源。安全

2. 採用防護性編程技巧服務器

這麼作能夠必定程度上避免出現可利用漏洞。其中一招是等價比較:把常量放到比較語句的前端。常量前置的話,若是不當心把比較操做符(兩個等號「==」)誤敲成賦值操做符(一個等號「=」),在編譯或運行時階段就會報錯。舉個例子:

  • 不良編碼習慣:變量在前

if ($result == ‘SUCCESS’) {

  • 更好些的編碼習慣: 常量在前——若是 「==」 誤敲成 「=」 會致使運行時錯誤或編譯錯誤

if (‘SUCCESS’ == $result) {

3. 清洗數據

數字身份,尤爲是消費級數字身份系統,每每會調用外部數據源。來自外部源或由用戶提供的全部數據都應該被當成不可信的。對Web客戶端來講,這些數據包括從查詢字符串或散列參數、cookie、本地存儲等等獲取的數據;對服務器端應用來講,這些數據包含經過POST、GET、cookie等等提交的數據。原生應用常會讀取配置文件,而這些配置文件有可能被故意篡改。

不管如何,第一道防線都是數據清洗:確保數據中僅含有經容許的字符/格式。其中一個重點是檢查最大數據域長度,避免緩衝區溢出攻擊。

數字身份平臺安全檢查的另外一個重要領域是圖片上傳。隨着證件照片的存儲和共享愈來愈普遍,IAM和CIAM服務也變得愈來愈重要。用戶上傳照片之類的文件上傳行爲可能會特別危險,必須嚴格檢查以確保文件真的只是單純的圖片而沒有隱藏的可執行內容。

4. 篩查

文檔和其餘文件存儲是數字身份生態系統的重要部分。放到存儲中的全部數據都必須通過可執行內容篩查。篩查過程無關底層數據庫技術。好比說,雖然非SQL數據庫對SQL注入攻擊免疫,但仍有自身弱點,仍然要通過篩查。

5. 過濾

相似的,不該直接接受外部命令字符串。應設置過濾器,老是檢查命令是否有效且適用於相應上下文。

6. 防止未經驗證的代碼執行

避免使用eval()類函數,由於此類函數容許未經驗證的代碼執行。內嵌eval()函數的函數也不該採用,好比JavaScript的SetTimer()。

7. 彈性爲王

開發面向消費者的數字身份服務每每意味着須要覆蓋大量用戶。你得容許各類各樣的值。應用開發編程的時候要考慮彈性,這樣才能在外部數據值超出預期範圍或類型時不會發生故障或容許代碼注入。良好的單元測試或功能測試一般能檢測出此類問題。

8. 謹慎使用開源代碼

產品中引入最新版開源代碼有可能同時引入了惡意軟件。使用開源代碼包時,最好在包管理器中設置特定版本號,以避免誤用未經驗證的版本。編譯過程應包含對全部外部文件的散列檢查。

9. 錯誤響應

錯誤響應是數字身份服務的關鍵部分,由於能夠告知用戶問題點並改善可用性。然而,這一功能也可能被惡意黑客用於摸清系統行爲。要確保錯誤響應動做不會向攻擊者泄露信息。客戶端-服務器錯誤響應應僅包含知會用戶的最少信息,而不是協助攻擊者窺探應用。

10. 審計日誌

若是攻擊確實發生了,你會想要知道到底結果如何以及確保攻擊事件能夠復現。但日誌記錄需有效,用無心義的審計數據填充日誌可能會拔苗助長。

11. 數字簽名

儘量採用數字簽名來驗證數據完整性。散列消息驗證碼(HMAC)是經濟實惠且有效的驗證方式。相似的,若是數據十分敏感,好比包含PII,那麼須要確保數據存儲和傳輸過程當中加密。經過公共或私人網絡傳送任何東西都應使用TLS。

12. 使用令牌進行安全通訊

進程間通訊能夠考慮使用令牌而不是口令進行身份驗證。

13. 移動應用

移動設備應用愈來愈多地被用於數字身份證實和交易。最好假定設備是能夠被越獄的。仔細檢查你處理的數據並評估所涉風險。在可能的狀況下引入越獄檢測代碼。

14. 漏洞檢查

每次新升級完成都要作漏洞檢查。有不少專業公司提供這項服務。CheckMarx或CAST之類的公司提供獨立源代碼分析器服務。此類解決方案是安全編碼實踐的重要組成部分,儘管它們不該被當作人工代碼檢查的替代品,而應做爲附加檢查完成。

15. 最重要的

緊跟最新漏洞。嚴重漏洞總會出如今 CVE Details 上。必須注意到新威脅並採起行動,確保本身的代碼中不存在這些漏洞。

應用或服務的安全編碼很重要,但若事關處理我的數據的系統,那就不只僅是重要,而是相當重要了。若是你設計或開發數字身份系統,安全和可用性總會成爲難以平衡的兩難選擇。但良好的安全編碼習慣可助你在管理網絡攻擊威脅的同時確保消費者身份系統的複雜功能不受影響。

CAST軟件應用分析報告:

https://www.castsoftware.com/...

Javelin《2018身份欺詐》報告:

https://www.javelinstrategy.c...

OWASP《安全編碼實踐快速參考指南》:

https://www.owasp.org/index.p...

CVE Details:

https://www.cvedetails.com/br...

相關閱讀

原文連接: https://www.aqniu.com/learn/4... 做者:nana 星期三, 二月 13, 2019

什麼是 Authing?

Authing 提供專業的身份認證和受權服務。
咱們爲開發者和企業提供用以保證應用程序安全所需的認證模塊,這讓開發人員無需成爲安全專家。
你能夠將任意平臺的應用接入到 Authing(不管是新開發的應用仍是老應用均可以),同時你還能夠自定義應用程序的登陸方式(如:郵箱/密碼、短信/驗證碼、掃碼登陸等)。
你能夠根據你使用的技術,來選擇咱們的 SDK 或調用相關 API 來接入你的應用。當用戶發起受權請求時,Authing 會幫助你認證他們的身份和返回必要的用戶信息到你的應用中。

<div align=center>Authing 在應用交互中的位置</div>

歡迎關注 Authing 技術專欄

Authing 社區

相關文章
相關標籤/搜索