阿里Android开发规范:安全与其他

以下内容摘自 阿里巴巴Android开发手册

我们的目标是:

  • 防患未然,提升质量意识,降低故障率和维护成本;
  • 标准统一,提升协作效率;
  • 追求卓越的工匠精神,打磨精品代码。
  • 【强制】必须遵守,违反本约定或将会引起严重的后果;
  • 【推荐】尽量遵守,长期遵守有助于系统稳定性和合作效率的提升;
  • 【参考】充分理解,技术意识的引导,是个人学习、团队沟通、项目合作的方向。

阿里Android开发规范:资源文件命名与使用规范
阿里Android开发规范:四大基本组件
阿里Android开发规范:UI 与布局
阿里Android开发规范:进程、线程与消息通信
阿里Android开发规范:文件与数据库
阿里Android开发规范:Bitmap、Drawable 与动画
阿里Android开发规范:安全与其他

1、【强制】使用 PendingIntent 时,禁止使用空 intent,同时禁止使用隐式 Intent
说明:

  1. 使用 PendingIntent 时,使用了空 Intent,会导致恶意用户劫持修改 Intent 的内容。禁止使用一个空 Intent 去构造 PendingIntent,构造 PendingIntent 的 Intent一定要设置 ComponentName 或者 action。
  2. PendingIntent 可以让其他 APP 中的代码像是运行自己 APP 中。PendingIntent的intent接收方在使用该intent时与发送方有相同的权限。在使用PendingIntent时,PendingIntent 中包装的 intent 如果是隐式的 Intent,容易遭到劫持,导致信息泄露。

正例:

Intent intent = new Intent(this, SomeActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
try {
    pendingIntent.send();
} catch (PendingIntent.CanceledException e) {
    e.printStackTrace();
}

反例 1:

Bundle addAccountOptions = new Bundle();
mPendingIntent = PendingTntent.getBroadcast(this, 0, new Intent, 0);
addAccountOptions.putParcelable(KEY_CALLER_IDENTITY, mPendingIntent);
addAccountOptions.putBoolean(EXTRA_HAS_MULTIPLE_USERS,
Utils.hasMultipleUsers(this));
AccountManager.get(this).addAccount(accountType,
    null,
    null,
    addAccountOptions,
    null,
    mCallback,
    null);

反例 2:
mPendingIntent 是通过 new Intent()构造原始 Intent 的,所以为“双无”Intent,这个PendingIntent最终被通过AccountManager.addAccount 方法传递给了恶意APP接口。

Intent intent = new Intent("com.test.test.pushservice.action.METHOD");
intent.addFlags(32);
intent.putExtra("app",msg);
PendingIntent.getBroadcast(this, 0, intent, 0));

如上代码PendingIntent.getBroadcast,PendingItent中包含的Intent为隐式intent,因此当 PendingIntent 触发执行时,发送的 intent 很可能被嗅探或者劫持,导致 intent 内容泄漏。
扩展参考:
1) https://developer.android.com/reference/android/app/PendingIntent.html
2) https://wiki.sei.cmu.edu/confluence/display/android/DRD21-J.+Always+pass+explicit+intents+to+a+PendingIntent
3)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
阿里巴巴是中国最大的电子商务公司之一,拥有众多的Java开发项目。为了统一和规范代码风格,提高代码质量和可维护性,阿里巴巴Java开发团队制定了《阿里巴巴Java开发规范》(以下简称规范)。 这本《阿里Java开发规范pdf》详细介绍了阿里巴巴Java开发团队在编码、命名、注释、异常处理、并发控制、日志记录等方面的最佳实践和建议。规范的目的是为了更加规范和一致地编写Java代码,提高代码的可读性和可理解性。 《阿里Java开发规范pdf》主要包括以下几个方面的内容: 1. 命名规范:包括类命名、方法命名、变量命名等。通过一致的命名规范,可以使代码更易于阅读和理解,降低开发人员维护代码的难度。 2. 编码规范:包括代码缩进、换行、代码块的使用等。规范要求开发人员编写简洁、清晰、易于理解的代码,避免出现冗余和复杂的代码。 3. 注释规范:包括方法注释、代码块注释等。规范要求开发人员在关键代码段添加必要的注释,用于解释代码的用途和功能。 4. 异常处理:规范指导开发人员应该合理处理异常情况,避免出现未捕获的异常导致程序崩溃。 5. 并发控制:规范提供了在多线程环境下编写安全代码的建议和最佳实践。 6. 日志记录:规范引导开发人员正确使用日志系统,记录重要的操作和异常信息,方便后期的系统监控和故障排查。 总之,《阿里Java开发规范pdf》是阿里巴巴Java开发团队多年经验总结的产物,对于编写高质量的Java代码有着重要的指导作用。它不仅适用于阿里巴巴内部的Java项目,也可以作为广大Java开发人员的参考和学习资料,帮助他们编写更规范、更易于维护的Java代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值