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
必須适當處理,例如通知使用者(必需)
SSLException
在 HTTPS 通信中,當伺服器證書無效或通信處于中間人攻擊下時,
SSLException
會作為驗證錯誤産生。 是以你必須為
SSLException
實作适當的異常處理。 通知使用者通信失敗,記錄故障等,可被認為是異常處理的典型實作。 另一方面,在某些情況下可能不需要特别通知使用者。 因為如何處理
SSLException
取決于應用規範和特性,你需要首先考慮徹底後再确定它。
如上所述,當
SSLException
産生時,應用可能受到中間人的攻擊,是以它不能實作為,試圖通過例如 HTTP 的非安全協定再次發送/接收敏感資訊。
5.4.2.4 不要建立自定義的 TrustManager
(必需)
TrustManager
僅僅更改用于驗證伺服器證書的
KeyStore
,就足以通過 HTTPS ,與例如自簽名證書的私有證書進行通信。 但是,正如在“5.4.3.3 禁用證書驗證的危險代碼”中所解釋的那樣,在網際網路上有很多危險的
TrustManager
實作,與用于這種目的的示例代碼一樣。 通過引用這些示例代碼而實作的應用可能有此漏洞。
當你需要通過 HTTPS 與私有證書進行通信時,請參閱“5.4.1.3 通過 HTTPS 與私有證書進行通信”中的安全示例代碼。
當然,自定義的
TrustManager
可以安全地實作,但需要足夠的加密處理和加密通信知識,以免執行存在漏洞的代碼。 是以這個規則應為(必需)。