1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-android-app-sec-guidebook

Клонировать/Скачать
4.7.md 9.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 20:24 c13bfb7

4.7 Использование обозреваемого намерения

Приложения Android могут быть разработаны для запуска из браузера и соответствовать ссылкам на веб-страницы. Эта функция называется «обозреваемое намерение».

Приложение будет реагировать на переход по ссылке, если в файле манифеста указан URI-шаблон. Приложение запускается с передачей ссылки в качестве параметра.

Кроме того, метод использования URI-шаблона для запуска соответствующего приложения из браузера поддерживается не только на Android, но и на iOS и других платформах. Это обычно используется для связи между веб-приложениями и внешними приложениями. Например, в приложениях Twitter и Facebook определены следующие URI-шаблоны, которые используются для запуска соответствующих приложений на Android и iOS из браузера.

Таблица 4.7-1

URL-шаблон Соответствующее приложение
fb:// Facebook
twitter:// Twitter

Учитывая взаимодействие и удобство, эта функция кажется очень удобной, но существуют некоторые риски, связанные с тем, что она может быть использована злонамеренными третьими сторонами. Можно предположить, что они злоупотребляют функциями приложения, создавая вредоносный сайт, ссылка которого имеет некорректные параметры, или обманывают пользователей мобильных устройств, чтобы установить вредоносное программное обеспечение, содержащее тот же 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 веб-ссылки, могут быть переданы вредоносным программам.

Например, параметры, содержащие идентификатор пользователя и пароль:

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

Более того, даже если параметры URL содержат только неконфиденциальную информацию, такую как идентификатор пользователя, после запуска приложения с помощью «обозреваемого намерения», ввод пароля в приложении может привести к тому, что пользователь запустит вредоносное ПО и введёт пароль в него. Поэтому необходимо учитывать определённые меры предосторожности, такие как выполнение всего процесса входа в систему в самом приложении. При разработке приложения следует помнить об этом, и запуск приложения через «обозреваемое намерение» эквивалентен запуску через неявное намерение, и нет гарантии, что будет запущено надёжное приложение.

4.7.2.2 Осторожно и безопасно обрабатывайте параметры URL (обязательно)

Параметры URL, передаваемые приложению, не всегда поступают из законных веб-страниц, так как соответствие шаблону URI может быть создано не только разработчиком, но и любым другим лицом. Кроме того, нет способа проверить, действительно ли параметры URL поступили с законной веб-страницы.

Поэтому перед использованием параметров URL необходимо убедиться в их безопасности, например, проверив, содержат ли они неожиданные значения.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-android-app-sec-guidebook.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-android-app-sec-guidebook.git
oschina-mirror
wizardforcel-android-app-sec-guidebook
wizardforcel-android-app-sec-guidebook
master