我正在发送如下的广播:
Intent intent = new Intent();
intent.setAction(com.test.CHANGE_MESSAGE_COUNT);
intent.putExtra("count", 1);
context.sendBroadcast(intent);
但有人说我遇到了一些安全问题,我应该使用intent.setClassName
,这样我的意图就不会被劫持。
所以我修改了我的代码,添加了一行:
Intent intent = new Intent();
intent.setAction(com.test.CHANGE_MESSAGE_COUNT);
intent.setClassName(context, "NotExistingClass");
intent.putExtra("count", 1);
context.sendBroadcast(intent);
我发现即使我设置了一个从未存在的类名,我仍然可以收到广播,这意味着我的意图仍然可能被劫持。
所以我想知道我的代码是否有问题,或setClassName
只能用于启动活动但不能用于发送广播?
答案 0 :(得分:2)
我认为您正在寻找Intent.setPackage(),这会将可以接收广播的应用限制为拥有该套餐名称。
[编辑]如果您在接收方所在的广播过程中进行广播,也请考虑使用LocalBroadcastManager
答案 1 :(得分:0)
您可以使用LocalBroadcastManager来解决此问题。我列出了关于这个类的google开发文档中的descpritons: 帮助程序注册并向您的进程中的本地对象发送Intent广播。您知道您正在播放的数据不会离开您的应用,因此无需担心泄露私人数据。 其他应用程序无法将这些广播发送到您的应用程序,因此您无需担心他们可以利用安全漏洞。 它比通过系统发送全球广播更有效。