不安全地使用深层链接

OWASP 类别MASVS-PLATFORM:平台互动

概览

与深层链接相关的安全风险源于其核心功能:在移动应用中实现流畅的导航和互动。深层链接漏洞源于深层链接实现或处理方面的弱点。恶意行为者可能会利用这些缺陷来获取特权函数或数据的访问权限,这可能会导致数据泄露、隐私权侵犯和未经授权的操作。攻击者可通过各种技术来利用这些漏洞,例如深层链接劫持和数据验证攻击。

影响

缺少适当的深层链接验证机制或以不安全的方式使用深层链接有助于恶意用户在有漏洞的应用的权限环境中执行攻击,例如绕过主机验证、跨应用脚本和远程执行代码。这可能会导致未经授权访问敏感数据或功能,具体取决于应用的性质。

从设计上讲,Android 允许多个应用为同一深层链接 URI 注册 intent 过滤器。为了防止恶意应用拦截要用于您的应用的深层链接,请在应用的 AndroidManifest 内的 intent-filter 中实现 android:autoVerify 属性。这样一来,用户就可以选择他们首选的应用来处理深层链接,从而确保操作符合预期,并防止恶意应用自动解读这些链接。

Android 12 引入了更严格的 Web intent 处理方式,以提高安全性。现在,应用必须通过 Android App Links 或用户在系统设置中进行选择,才能处理来自特定网域的链接。这可防止应用盗用不应处理的链接。

如需为您的应用启用链接处理验证,请添加与以下格式匹配的 intent 过滤器(此示例摘自验证 Android App Links 文档):

  <!-- 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>

深层链接可以包含提供给目标 intent 的其他参数,例如用于执行进一步操作。严格的数据验证是安全深层链接处理的基础。开发者应仔细验证和清理来自深层链接的所有传入数据,以防止恶意代码或值被注入合法应用中。为此,您可以将任何深层链接参数的值与预定义的预期值许可名单进行对比。

应用应先检查其他相关的内部状态(例如身份验证状态或授权),然后再公开敏感信息。例如,完成游戏关卡时获得的奖励。在这种情况下,值得验证已完成关卡这一前提条件,并在未完成关卡时重定向到主屏幕。

资源