安卓应用安全指南 4.7 使用可浏览的意图

简介: 4.7 使用可浏览的意图 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA 4.0Android 应用可以设计为从浏览器启动,并对应网页链接。

4.7 使用可浏览的意图

原书:Android Application Secure Design/Secure Coding Guidebook

译者:飞龙

协议:CC BY-NC-SA 4.0

Android 应用可以设计为从浏览器启动,并对应网页链接。 这个功能被称为“可浏览的意图”。 通过在清单文件中指定 URI 模式,应用将响应具有其 URI 模式的链接转移(用户点击等),并且应用以链接作为参数启动。

此外,使用 URI 模式从浏览器启动相应应用的方法不仅支持 Android,也支持 iOS 和其他平台,这通常用于 Web 应用与外部应用之间的链接等。例如, 在 Twitter 应用或 Facebook 应用中定义了以下 URI 模式,并且在 Android 和 iOS 中从浏览器启动相应的应用。

表 4.7-1

URL 模式 相应应用
fb:// Facebook
twitter:// Twitter

考虑到联动性和便利性,功能似乎非常方便,但存在一些风险,即该功能被恶意第三方滥用。 可以假设的是,它们滥用应用功能,通过准备一个恶意网站,它的链接的 URL 具有不正确的参数,或者它们通过欺骗智能手机用户安装恶意软件,它包含相同的 URI 模式,来获取包含在 URL 中的信息。 使用“可浏览的意图”来对付这些风险时有一些要注意的地方。

4.7.1 示例代码

使用“可浏览的意图”的应用的示例代码如下:

要点:

1) (网页侧)不得包含敏感信息。

2) 仔细和安全地处理 URL 参数。

Starter.html

<html>
    <body>
        <!-- *** POINT 1 *** Sensitive information must not be included -->
        <!-- Character strings to be passed as URL parameter, should be UTF-8 and URI encoded. -->
        <a href="secure://jssec?user=user_id"> Login </a>
    </body>
</html>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:allowBackup="false" >
        <activity
            android:name=".BrowsableIntentActivity"
            android:label="@string/title_activity_browsable_intent"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                // Accept implicit Intent
                <category android:name="android.intent.category.DEFAULT" />
                // Accept Browsable intent
                <category android:name="android.intent.category.BROWSABLE" />
                // Accept URI 'secure://jssec'
                <data android:scheme="secure" android:host="jssec"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

BrowsableIntentActivity.java

package org.jssec.android.browsableintent;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.TextView;

public class BrowsableIntentActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_browsable_intent);
        Intent intent = getIntent();
        Uri uri = intent.getData();
        if (uri != null) {
            // Get UserID which is passed by URI parameter
            // *** POINT 2 *** Handle the URL parameter carefully and securely.
            // Omitted, since this is a sample. Please refer to "3.2 Handling Input Data Carefully and Securely."
            String userID = "User ID = " + uri.getQueryParameter("user");
            TextView tv = (TextView)findViewById(R.id.text_userid);
            tv.setText(userID);
        }
    }
}

4.7.2 规则书

使用“可浏览的意图”时,需要遵循以下规则:

4.7.2.1 (网页端)敏感信息不得包含在相应链接的参数中(必需)

当点击浏览器中的链接时,会发出一个意图,该意图的数据中有 URL 值(可以通过Intent#getData获取),并且带有相应意图过滤器的应用,从 Android 系统启动。

此时,当几个应用设置意图过滤器来接收相同的 URI 模式时,应用选择对话框将显示,与隐式意图正常启动相同,并启动用户选择的应用。 如果应用选择对话框中列出了恶意软件,则用户可能会错误地启动恶意软件,并将 URL 中的参数发送到恶意软件。

如上所述,需要避免直接在 URL 参数中包含敏感信息,因为它用于创建一般网页链接,所有包含在网页链接 URL 中的参数都可以提供给恶意软件。

用户 ID 和密码包含在 URL 中的例子:

insecure://sample/login?userID=12345&password=abcdef

此外,即使 URL 参数仅包含非敏感内容,如用户ID,在由’可浏览的意图’启动后,在应用中输入密码时,用户可能会启动恶意软件并向其输入密码。所以应该考虑,一些规范,例如整个登录过程,在应用端完成。 在设计应用时必须记住它,并且由’可浏览的意图’启动应用,等同于由隐式意图启动,并且不保证启动了有效的应用。

4.7.2.2 小心和安全地处理 URL 参数(必需)

发送给应用的 URL 参数,并不总是来自合法的 Web 页面,因为匹配 URI 模式链接不仅可以由开发者生成,也可以由任何人生成。 另外,没有方法可以验证 URL 参数是否从有效网页发送。

因此,在使用 URL 参数之前,有必要验证 URL 参数的安全性,例如,检查是否包含意外值。

相关文章
|
8月前
|
安全 Linux Android开发
Android 安全功能
Android 安全功能
93 0
|
8月前
|
安全 Linux Android开发
Android安全启动学习(一):AVB校验是什么?
Android安全启动学习(一):AVB校验是什么?
470 0
|
8月前
|
存储 安全 Linux
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
394 0
|
1月前
|
存储 安全 Android开发
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
|
3月前
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
448 0
|
6月前
|
存储 安全 数据安全/隐私保护
🔎Android安全攻防实战!守护你的应用数据安全,让用户放心使用!🛡️
【7月更文挑战第28天】在移动应用盛行的时代,确保Android应用安全性至关重要。本文以问答形式探讨了主要安全威胁(如逆向工程、数据窃取)及其对策。建议使用代码混淆、签名验证、数据加密等技术来增强应用保护。此外,还推荐了加密API、HTTPS通信、代码审计等措施来进一步加强安全性。综上所述,全面的安全策略对于构建安全可靠的应用环境必不可少。#Android #应用安全 #代码混淆 #数据加密
102 3
|
6月前
|
存储 安全 Android开发
安卓应用开发的安全之道
【7月更文挑战第4天】在数字时代,移动应用的安全性至关重要。本文将深入探讨在安卓平台上开发安全应用的最佳实践,包括代码混淆、数据存储加密、网络通信安全、权限管理以及定期的安全审计和更新策略。通过这些措施,开发者可以显著提高他们的应用抵御恶意攻击的能力,保护用户数据免受侵害。
|
7月前
|
安全 网络协议 网络安全
程序与技术分享:Android应用安全之数据传输安全
程序与技术分享:Android应用安全之数据传输安全
|
存储 安全 Java
Android DataStore:安全存储和轻松管理数据
Android DataStore:安全存储和轻松管理数据
|
8月前
|
安全 算法 Android开发
安卓逆向工程与安全分析:保护您的应用知识产权
【4月更文挑战第14天】在数字时代,安卓应用开发者面临知识产权保护的挑战,主要源于安卓系统的开放性和逆向工程。逆向工程能揭示应用源代码,增加被盗用和安全风险。为应对挑战,开发者可采取代码混淆、加密、NDK开发、服务器端验证、定期更新和安全审计等策略。关注安全动态,利用第三方服务也是提升应用安全的重要途径。保护知识产权,确保应用安全,是开发者持续关注和努力的方向。
93 1