RPC 協議安全

在 Dubbo 中更安全地使用 RPC 協議

Dubbo 支援 RPC 協議的擴展。理論上,用戶可以基於此擴展機制啟用任何 RPC 協議。這帶來了極大的靈活性,但同時,用戶必須意識到潛在的安全風險。

Dubbo 2.7 官方版本提供的序列化協議如下

  • Dubbo
  • RMI
  • Hessian
  • Http/Rest
  • Webservice
  • Thrift
  • gRPC

從 Dubbo 3.0 開始,預設情況下僅提供以下序列化協議支援

  • Dubbo
  • Triple/gRPC
  • Http/Rest

Triple、gRPC、Http 和 Rest 協議都是基於 HTTP 協議構建的。請求的格式可以嚴格區分。例如,標頭是純文字,以避免在讀取 Token 時出現 RCE 等風險。對於 Dubbo 協議,由於它是直接基於 TCP 二進制設計的,除了一些特定欄位外,它使用序列化協議編寫。因此,如果開啟了有風險的序列化協議,仍然會存在 RCE 等風險。對於 RMI 協議,由於它基於 Java 序列化機制,因此存在 RCE 等風險。對於 Hessian 協議,由於它基於 Hessian 序列化機制,並且預設的 Hessian 協議(非 Dubbo Shade 的 Hessian-Lite 協議)無法配置黑白名單,也沒有預設的黑名單,因此存在 RCE 等風險。

  1. 如果用戶希望使用 Token 認證機制來防止未經認證和不受信任的請求來源威脅 Provider 的安全,則應使用基於 HTTP 標準擴展的協議(例如 Triple),以避免在讀取 Token 參數時出現安全風險。

  2. 特別是,Dubbo 社群強烈不建議將 Dubbo 協議、RMI 協議、Hessian 協議以及其他不基於 HTTP 標準擴展的協議暴露在公共網路環境中,因為 Dubbo 協議的初衷是在內網環境中提供高效能 RPC 服務,而不是在公共網路環境中。

  3. 如果您的應用程式需要公開網路存取,Dubbo 社群建議您使用 Triple 協定,並避免使用非 Protobuf 模式,或是僅公開標準 application/json 格式服務、基於 Dubbo 3.3 及以上版本的服務。

  4. 請注意,所有連網伺服器都容易受到阻斷服務 (DoS) 攻擊。對於常見問題,例如用戶端向您的伺服器傳輸大量資料或重複請求相同的 URL,我們無法提供**神奇的**解決方案。一般來說,Apache Dubbo 旨在防禦可能導致伺服器資源消耗與輸入資料的大小或結構不成比例的攻擊。因此,為了保護您的伺服器,在將 Dubbo 服務暴露於公共網際網路之前,請確保您已部署 Web 應用程式防火牆 (WAF) 或其他安全裝置,以防止此類攻擊。


上次修改日期:2024 年 5 月 28 日:更新協定安全性注意事項 (3d85cf32efc)