以不安全的方式使用深層連結

OWASP 類別: MASVS-PLATFORM:平台互動

總覽

深層連結的安全性風險源自於其核心功能,也就是在行動應用程式中提供順暢的導覽和互動體驗。深層連結漏洞源自於深層連結的實作或處理方式有缺陷。惡意人士可能會利用這些安全漏洞,獲得特殊權限功能或資料的存取權,進而可能導致資料侵害、侵犯隱私權,以及未經授權的動作。攻擊者可以透過各種技巧利用這些安全漏洞,例如深層連結劫持和資料驗證攻擊。

影響

如果缺乏適當的深層連結驗證機制,或不安全地使用深層連結,惡意使用者就可能會執行攻擊,例如主機驗證繞過、跨應用程式指令碼,以及在有安全漏洞的應用程式權限內容中執行遠端程式碼。視應用程式的性質而定,這可能會導致未經授權存取機密資料或函式。

根據設計,Android 允許多個應用程式為相同的深層連結 URI 註冊意圖篩選器。如要防止惡意應用程式攔截應用程式專用的深層連結,請在應用程式的 AndroidManifest 內的 intent-filter 中實作 android:autoVerify 屬性。使用者可以選取偏好的應用程式來處理深層連結,確保所需的操作,並防止惡意應用程式自動解讀深層連結。

Android 12 引入更嚴格的網頁意圖處理機制,以提升安全性。應用程式現在必須經過驗證,才能處理特定網域的連結,方法是透過 Android 應用程式連結或系統設定中的使用者選項。這可避免應用程式將不應處理的連結劫持。

如要為應用程式啟用連結處理驗證功能,請新增符合下列格式的意圖篩選器 (這個範例取自「驗證 Android 應用程式連結」說明文件):

  <!-- Make sure you explicitly set android:autoVerify to "true". -->
  <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
  
      <!-- If a user clicks on a shared link that uses the "http" scheme, your
           app should be able to delegate that traffic to "https". -->
      <data android:scheme="http" />
      <data android:scheme="https" />
  
      <!-- Include one or more domains that should be verified. -->
      <data android:host="..." />
  </intent-filter>

深層連結可包含額外參數,以便提供給目標意圖,例如執行進一步動作。安全深層連結處理的基礎是嚴格的資料驗證。開發人員應仔細驗證並處理深層連結傳入的所有資料,以免惡意程式碼或值在合法應用程式中注入。您可以透過檢查任何深層連結參數的值,與預先定義的預期值許可清單進行比對,實作這項功能。

應用程式應先檢查其他相關的內部狀態 (例如驗證狀態或授權),再揭露機密資訊。舉例來說,當使用者完成遊戲關卡時,系統就會提供獎勵。在這種情況下,建議您驗證已完成關卡的先決條件,如果沒有,則重新導向至主畫面。

資源