本文介紹Postman公司是如何構建安全可靠的BFF,能夠做爲參考來逐步完善的BFF安全建設。 主要是學習如何全局安全建設,具體實現的方式與工具能夠選擇適合項目狀況的。php
原文連接html
打造一個安全的BFF須要考量的點
- 單點故障和攻擊
- 面向公衆的服務
- 處理用戶輸入
- 如何對API安全性進行量化
安全指標
一個安全的接口須要知足如下3點git
保密性 |
完整性(一致性) |
可用性 |
只有受權人員才能訪問合適的數據 |
你的服務提供的數據不會被篡改 |
內容可供受權用戶按需使用 |
BFF的數據流向
下圖反應了BFF在一個完整數據流扮演的角色,涵蓋從流入到流出中各個階段關鍵點。 主要有如下3個階段github
- 客戶端發起數據流入BFF
- BFF與服務間交互
- BFF將服務結果整合流出給客戶端
接下來咱們從數據流入開始分析每一個階段須要的安全建設npm
數據流入時的安全建設
BFF接受到數據以後,首先要進行合法性校驗 瀏覽器
校驗
BFF對於校驗的力度安全
- BFF 不須要完成全部校驗
- BFF 應該完成本身的生態範圍檢查
- 特定於業務邏輯的檢查將推送到下游服務
關鍵路徑
關鍵路徑指在請求到達業務邏輯以前要調用的服務。關鍵路徑的長度是對判斷BFF驗證量的指標。關鍵路徑最好短且有錯誤處理機制。 常見的兩個關鍵路徑服務器
最小特權原則
關於權限,通常採用保守的最小特權原則架構
- 用戶只能訪問必要的最小資源
- 默認狀況下,始終假定用戶無權訪問
- 特定條件下才容許訪問
示例
下圖是Postman採用的BFF架構ide
他們將訪問控制和校驗從業務邏輯中分離。 使用yeoman
的預約義安全設置進行堆棧安裝。
依賴包的維護
在依賴包的維護上,對lockfile使用嚴格的版本控制。並使用工具檢查CI管道中容易受到攻擊的依賴包。 工具:nsp, npm audit, snyk
強制安全檢查
採用如下強制方案來作安全檢查
- 配置安全檢查lint
- 系統測試階段捕獲有問題的配置項
- 使用postman collection 集成到CI管道中完成E2E測試。
BFF與服務間通訊的安全建設
經歷關鍵路徑後,BFF創建與微服務間的鏈接須要作如下幾個方面的安全建設
服務內部的權限檢查
- BFF開發者與服務內部實現隔離
- 防止身份驗證信息在響應結果和日誌中泄露
- 容許祕鑰輪換且不須要更改服務器端代碼
標記請求
- 將每一個傳入請求與用戶令牌關聯
- 每一個服務均可以利用此令牌來獲取用戶元數據並應用驗證
越權漏洞排除
- 避免IDOR
- 全部用戶發起的操做都必須具備基於用戶令牌的驗證。
日誌
- 敏感信息和用戶信息過濾
- 使用啓發式的方法來防止意外記錄。
- 追蹤BFF日誌來預防用戶我的身份信息偷取。
BFF與客戶端通訊時出站內容安全建設
BFF接收到微服務的請求結果後,融合處理後返回給客戶端,完成數據流出,此階段須要作的安全建設以下。
HTTPS / HSTS
- 根據須要和所需的用戶信任級別選擇證書
- 確保第三方調用和重定向經過HTTPS
- 確認全部內容均經過HTTPS後,實施HSTS(+預加載)。
Content-Security-Policy
- 減小由惡意代碼注入引發的危害。
- 首先使用report-only mode 以防止反作用
- 防止數據泄露的理想方法:hrefs未涵蓋。
其餘請求頭
- CORS: 誰能訪問你的資源
- X-XSS: 在某些瀏覽器中檢測並阻止XSS
- X-Frame-Options: 容許或拒絕在iframe中顯示網站。
- HPKP: 容許HTTPS網站抵制假冒行爲
- SRI: 驗證第三方資產
- 參考連接:OWASP Secure Headers Project
注意事項
- 全部header的支持取決於客戶端瀏覽器
- 不能僅僅依靠Header來確保BFF的安全性
- 此階段的安全建設不能替代輸入驗證和輸出格式化
BFF層自身的基礎架構安全建設
完成了數據流上的安全建設,還須要對BFF層自身的基礎架構作安全建設
審覈與自動化
-
須要審覈的內容
-
Postman 的作法
- 使用Postman collection 來完成資源可靠建立。
- 使用Postman Monitors 對服務進行按期審覈
- 使用Postman collection 完成健康檢查 Health check
- 根據環境驗證關鍵配置
- 若是出現明顯錯誤,請阻止部署。 例如 泄露私鑰。
- 這是一個安全保障,不是做爲測試流程。
SDLC 系統開發週期的變化
完成數據流和BFF層自身的基礎架構安全建設,咱們站在系統開發週期上看看,postman是如何確保安全性。
明確安全KPI
- 經過CVSS分數對漏洞進行分類。
- 漏洞迴歸
- 解決時間
- 外部安全報告
VAPT 漏洞評估和滲透測試
VAPT是開發後的步驟,用於評估軟件版本的安全性。
- 包含服務的黑盒和白盒測試。
- 安全流程是自動化執行的。
總結
回顧安全指標
回顧開頭的安全指標,Postman一共作了如下事情
保密性 |
完整性(一致性) |
可用性 |
Validation 合法性校驗 |
Request tagging 請求標記 |
Short critical path 短關鍵路徑 |
PoLP 最小權限原則 |
Access control (IDOR) 訪問控制 |
Platform audits 平臺審覈 |
Log scrubbing 日誌清洗 |
Content security (HTTPS, SRI, CSP, etc.) 內容安全 |
Healthcheck 安全檢查 |
要點
- 創建BFF /公共API 時須要考量安全建設。
- 創建安全的API是一個按部就班的過程。
- 安全是開發過程的一部分
示例代碼
github.com/ankit-m/tal…