天天看點

安卓應用安全指南 5.4.2 通過 HTTPS 的通信 規則書

5.4.2 通過 HTTPS 的通信 規則書

原書: Android Application Secure Design/Secure Coding Guidebook 譯者: 飛龍 協定: CC BY-NC-SA 4.0

使用 HTTP/S 通信時,遵循以下規則:

5.4.2.1 必須通過 HTTPS 通信發送/接收敏感資訊(必需)

在 HTTP 事務中,發送和接收的資訊可能被嗅探或篡改,并且連接配接的伺服器可能被僞裝。 敏感資訊必須通過 HTTPS 通信發送/接收。

5.4.2.2 必須小心和安全地處理通過 HTTP 接收到的資料(必需)

HTTP 通信中收到的資料可能由攻擊者利用應用的漏洞産生。 是以,你必須假定應用收到任何值和格式的資料,然後小心實作資料處理來處理收到的資料,以免造成任何漏洞。此外,你不應該盲目信任來自 HTTPS 伺服器的資料。 由于 HTTPS 伺服器可能由攻擊者制作,或者收到的資料可能在 HTTPS 伺服器的其他位置制作。 請參閱“3.2 小心和安全地處理輸入資料”。

5.4.2.3

SSLException

必須适當處理,例如通知使用者(必需)

在 HTTPS 通信中,當伺服器證書無效或通信處于中間人攻擊下時,

SSLException

會作為驗證錯誤産生。 是以你必須為

SSLException

實作适當的異常處理。 通知使用者通信失敗,記錄故障等,可被認為是異常處理的典型實作。 另一方面,在某些情況下可能不需要特别通知使用者。 因為如何處理

SSLException

取決于應用規範和特性,你需要首先考慮徹底後再确定它。

如上所述,當

SSLException

産生時,應用可能受到中間人的攻擊,是以它不能實作為,試圖通過例如 HTTP 的非安全協定再次發送/接收敏感資訊。

5.4.2.4 不要建立自定義的

TrustManager

(必需)

僅僅更改用于驗證伺服器證書的

KeyStore

,就足以通過 HTTPS ,與例如自簽名證書的私有證書進行通信。 但是,正如在“5.4.3.3 禁用證書驗證的危險代碼”中所解釋的那樣,在網際網路上有很多危險的

TrustManager

實作,與用于這種目的的示例代碼一樣。 通過引用這些示例代碼而實作的應用可能有此漏洞。

當你需要通過 HTTPS 與私有證書進行通信時,請參閱“5.4.1.3 通過 HTTPS 與私有證書進行通信”中的安全示例代碼。

當然,自定義的

TrustManager

可以安全地實作,但需要足夠的加密處理和加密通信知識,以免執行存在漏洞的代碼。 是以這個規則應為(必需)。

繼續閱讀