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

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

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

Создание/использование частной (приватной) активности

Частная активность — это активность, которую не могут запустить другие приложения. Поэтому она является наиболее безопасной активностью.

При использовании активности, которая используется только в приложении (частная активность), вам не нужно беспокоиться о том, что она будет случайно отправлена любому другому приложению, если вы явно укажете намерение использования этой активности. Однако сторонние приложения могут считывать намерения, используемые для запуска активности. Поэтому, если вы поместите конфиденциальную информацию в намерение запуска активности, необходимо принять меры предосторожности, чтобы гарантировать, что эта информация не будет прочитана злоумышленниками.

Ниже приведён пример кода создания частной активности:

  • Не указывайте taskAffinity.
  • Не указывайте launchMode.
  • Явно установите для экспортируемого атрибута значение false.
  • Тщательно и безопасно обрабатывайте полученные намерения, даже если они отправлены из того же приложения.
  • Конфиденциальная информация может быть передана, поскольку она отправляется и принимается в рамках одного приложения.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.jssec.android.activity.privateactivity" >
    
    <application
        android:allowBackup="false"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        
        <!-- Частная активность -->
        <!-- *** Пункт 1 *** Не указывайте taskAffinity -->
        <!-- *** Пункт 2 *** Не указывайте launchMode -->
        <!-- *** Пункт 3 *** Явно установите атрибут exported в значение false -->
        <activity
            android:name=".PrivateActivity"
            android:label="@string/app_name"
            android:exported="false" />
        
        <!-- Публичная активность, запущенная средством запуска -->
        <activity
            android:name=".PrivateUserActivity"
            android:label="@string/app_name"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

PrivateActivity.java

package org.jssec.android.activity.privateactivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class PrivateActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.private_activity);
        // *** Пункт 4 *** Тщательно и безопасно обработайте полученное намерение, даже если оно было отправлено из того же приложения
        String param = getIntent().getStringExtra("PARAM");
        Toast.makeText(this, String.format("Received param: ¥"%s"", param), Toast.LENGTH_LONG).show();
    }
    
    public void onReturnResultClick(View view) {
        // *** Пункт 5 *** Конфиденциальную информацию можно отправить, так как она отправляется и получается в рамках одного приложения
        Intent intent = new Intent();
        intent.putExtra("RESULT", "Sensitive Info");
        setResult(RESULT_OK, intent);
        finish();
    }
}

Пример кода использования частной активности:

  • Не устанавливайте флаг FLAG_ACTIVITY_NEW_TASK для намерения, используемого для запуска активности.
  • Используйте явное намерение с классом, указанным для вызова активности в том же приложении.
  • Поскольку целевая активность находится в одном и том же приложении, конфиденциальная информация может быть отправлена только через putExtra().

Предупреждение: если не соблюдать пункты 1, 2 и 6, третьи стороны могут прочитать намерение. Для получения дополнительной информации см. разделы 4.1.2.2 и 4.1.2.3.

  • Даже если данные поступают от активности в том же приложении, их следует тщательно и безопасно обрабатывать.

PrivateUserActivity.java

package org.jssec.android.activity.privateactivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class PrivateUserActivity extends Activity {

    private static final int REQUEST_CODE = 1;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.user_activity);
    }
    
    public void onUseActivityClick(View view) {
        // *** Пункт 6 *** Не устанавливайте флаг FLAG_ACTIVITY_NEW_TASK для намерений, используемых для запуска активности
        // *** Пункт 7 *** Используйте явные намерения с указанным классом для вызова активности в том же приложении
        Intent intent = new Intent(this, PrivateActivity.class);
        // *** Пункт 8 *** Конфиденциальная информация может быть отправлена только с помощью putExtra(), поскольку целевая активность находится в том же приложении
        intent.putExtra("PARAM", "Sensitive Info");
        startActivityForResult(intent,

Опубликовать ( 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