gpt4 book ai didi

android - AlarmManager 和 WakefullBroadcastReceiver 传递的 Extras 有多私密?

转载 作者:搜寻专家 更新时间:2023-11-01 09:37:38 25 4
gpt4 key购买 nike

我正在尝试使用 AlarmManager 来实现一些警报调度。因为当触发警报时,我想使用 WakefulBroadcastReceiver 启动 IntentService 来做一些后台工作。

我有一些与为警报 Intent 传递的参数的安全/隐私有(private)关的问题。

  • 为警报设置 PendingIntent 时,我执行以下操作:
    Intent myIntent = new Intent(context, MyReceiver.class);        
    myIntent.putExtra("test", "testValue");
    Bundle bundle = new Bundle();
    bundle.putParcelable("bundleValue", bundleTestValue2);
    myIntent.putExtra("test3", bundle);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 323,
    myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

  • 我的问题是:警报的pendingIntent 设置为 Extra 的值有多私密?是否有机会被其他应用程序读取,因为 Android Alarm 的管理器在预定后正在使用它们?
  • 通过像这样的接收器
    public class MyReceiver extends WakefulBroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
    startWakefulService(context, MyIntentService);
    }

  • 在android list 上
     <receiver
    android:name=".receivers.MyReceiver"
    android:exported="false"/>

    <service
    android:name=".MyIntentService"
    android:exported="false"/>

    和服务
    public class MyIntentService extends IntentService {

    @Override
    protected void onHandleIntent(Intent intent) {

    try {
    //logic here
    } catch{
    } finaly{
    MyReceiver.completeWakefulIntent(intent);
    }
    }

    从我的 Activity 中调用
    sendBroadcast(new Intent(context, MyReceiver.class).putExtra(...);
    从警报中安排待处理的 Intent
    Intent myIntent = new Intent(context, MyReceiver.class);        
    myIntent.putExtra("test", "testValue");

    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 323,
    myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    这个接收器对其他应用程序的暴露程度如何?它可以对除我之外的其他应用程序使用react吗?这是否会引发任何可能的安全问题?

    谢谢你。

    后期编辑:
    由于 WakefullBroadcastReceiver 似乎是保证我的服务将获得部分唤醒锁的唯一方法,我如何确保 100% 没有其他应用程序知道我的接收器,并且我的接收器不会收到任何其他调用,除了来自我的 Activity 还是来自我的设置 Alarm
    WakefullBroadcastReceiver 模式与 CommonsWare 的 WakefulIntentService 相比如何工作?

    稍后编辑:
    我终于设法完成了我的实现。
  • 如前所述,我的 WakefulBroadcastReceiverIntentService 在我的 Android Manifest 中都声明为 exported="false",据我了解,这意味着只有我的应用程序可以访问它们。由于接收器没有导出,它是否接收来自应用程序外部的广播?
  • 设置警报时,我使用此 PendingIntent :
    Intent myIntent = new Intent(context, MyReceiver.class);

    myIntent.putExtra("databaseId", "1");
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 323,
    myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
  • 从我的 Activity 中调用时,我这样做:
  • sendBroadcast(new Intent(context, MyReceiver.class).putExtra("databaseId", "1"));
    这够了吗?

    最佳答案

    Intent 相关的隐私注意事项其他

    一般来说,我会说将敏感数据放入 Intent 是一种不安全的做法。 .

    理论上,如果 Intent只能由特定应用程序使用(稍后讨论),那么只有该应用程序才能看到其内容。但是,鉴于大量的 Android 设备和操作系统版本(包括根设备和自定义 ROM),我不会指望它。

    您没有指定要传入的敏感数据类型 Intent额外的,因此我只能给出这些一般性建议:

  • 确保您了解相关数据的“ secret 级别”:它是 secret 的,还是只是受限制的?或者,也许,它是公开的(在这种情况下不需要保护)?
  • 尝试找到另一种不涉及在 Intent 中传递敏感数据的方法(我自己从来没有遇到过这样的需求)。
  • 如果您绝对必须在 Intent 中传递敏感数据附加功能 - 考虑对其进行加密。加密模型应该足以满足数据的“ secret 级别”,以及如果该数据被拦截可能造成的潜在危害(它可以一直上升到“服务器端”加密)。

  • BroadcastReceiver 相关的隐私/安全注意事项

    一般情况下, BroadcastReceiver是接收“系统范围”广播的组件。广播是“系统范围的”这一事实本身就应该说明与之相关的隐私级别。

    话虽如此,开发人员可以通过一种机制来限制广播的范围:自定义权限。自定义权限的使用允许对广播进行两个“控制级别”:
  • 如果广播需要特定权限,则仅当 BroadcastReceiver拥有该权限将接收广播。
  • BroadcastReceiver通过特定权限过滤传入的广播,然后只有带有该权限的广播才会被传递给该接收者。

  • 虽然上述几点乍一看似乎相似,但这些是可以单独使用或组合使用的不同方案。第一个方案将广播与权限相关联(并且该广播的发送者自己不一定拥有该权限),而第二个方案通过特定权限过滤所有广播(并且接收者必须具有该权限)。

    在你的情况下更好的方法

    编辑:如果“wakefullness”不是要求的一部分,这可能是一个更好的方法。但它是。由于无法保证 ServiceAlarmManager 发起将有机会获得唤醒锁 - 这种方法不适合 OP 的情况。

    请注意,广播和自定义权限的设计是为了在应用程序级别引入“解耦”——该方案允许发送方应用程序完全不知道接收方应用程序,只要它们同意一个自定义权限(好吧,相同的方案也用于预安装的公共(public)权限,但您不希望使用公共(public)权限保护您的敏感数据)。

    但是,在您的情况下,发送者和接收者是同一个应用程序。在这样的设置中,你真的不需要与广播相关的所有麻烦 - 只需构造 PendingIntent开始所需的 Service在您的应用程序中,您可以一次获得所有内容:
  • PendingIntent和相关的Intent开始一个特定的Service在您的应用程序中(按名称),因此没有其他应用程序可以拦截它(理论上,请记住上面的讨论)。
  • 目标 Service可以不导出,因此没有其他应用程序可以以任何方式访问它。

  • 没关系 :)

    关于android - AlarmManager 和 WakefullBroadcastReceiver 传递的 Extras 有多私密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41900706/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com