Postman是如何構建一個安全可靠的BFF

本文介紹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分數對漏洞進行分類。
  • 漏洞迴歸
  • 解決時間
    • -SLA
  • 外部安全報告

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…

相關文章
相關標籤/搜索