安卓应用安全指南 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 参数的安全性,例如,检查是否包含意外值。

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

热门文章

最新文章

  • 1
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 2
    Android历史版本与APK文件结构
  • 3
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 4
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 5
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 6
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 8
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 9
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 10
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥