Android应用的安全开发

Android是一个完全开放的平台,其安全问题一直受到人们的关注。

Android平台基于Linux内核,而Linux内核中提供了一个安全模型。Android平台有一个独一无二的抽象方式,然而它是基于Linux内核实现的,将Linux的用户账号管理应用到应用程序库中。在安装之后,应用程序被授予一个唯一的用户 标识符(UID),这和桌面机以及服务器上的UNIX UID非常相似。UID在一个给定的系统上通常是一个唯一的比较小的数字,如1011,内核控制该数字来控制对文件、设备以及其他资源的访问。而控制的依据,来自于用户是否同意应用程序安装时申明的权限(即开发是在Manifest文件中写入的权限)

具体的安全有以下几个方面:

1.在Manifest文件中对Activity、BroadcastReceiver、Service或者ContentProvider进行谨慎的定义。

2.IntentFilter要尽可能多地正确添加应用于Intent的category。Category有助于阻挡那些带来意料外后果的Intent。

3.Activity不能依赖于IntentFilter来防止调用者传递给他们恶意的intent。另一方面,activity实现可以依赖于权限检查作为一个安全机制。在activity的申明中设置android:permission属性会阻止缺乏指定权限的程序来直接启动activity。

4.避免将数据放到用来启动Activity的intent中。例如:恶意软件能够注册一个更高优先级的intent-filter并且将用户的敏感数据发送到自己的Activity而不是原来的Activity中。

5.Sticky Broadcast通常是包含信息的,并且被设计用来告诉其它进程关于系统的状态,它在发送完后还会一直保持。避免利用其进行敏感信息共享,因为它不能保证安全。

6.一种针对许多IPC机制进行的攻击方式就是在预料的IPC通道或者名称进行恶意名称占据攻击。监听者监听可信程序用来通信的一个端口、名称等,客户端因此会最终和错误的服务器进行通信。可以通过onServiceConnected(ComponentName name, IBinder binder)中应用component名称包作为一种方式验证其权限。

res = getPackageManager().checkPermission(permToCheck, name.getPackageName)

7.对于contentProvider,我们必须注意:一系列的带有精致where的调用结果,调用者能够缓慢地重建所储存的数据。

8.避免SQL注入攻击。

9.SharePreference避免使用MODE_WORLD_WRITABLE

10.为了使用户在照相机、计算机以及Android平台之间来回移动数据更加容易,这些储存卡的格式是VFAT,VFAT是一种古老的格式,并不支持Linux系统访问控制机制。因此,储存在这些储存卡上的数据是未受保护并且能够被设备上任何程序访问的。如果用户需要储存机密数据,可以对这些数据进行加密,并将较小的密码储存在程序的文件储存区域而将较大的密文储存在共享储存卡上。

11.Binder是一个内核设备驱动,它应用了Linux的共享存储功能来实现安全、高效的IPC。系统服务作为Binder接口对外发布,并且AIDL(Android Interface Definition Language)不仅仅用来定义系统接口,也允许开发人员创建自有的Binder客户端和服务器端。进行调用者的权限或者身份检查实现安全。如Context的方法checkPermission(String permission, int pid, int uid)在进行权限检查时十分有用。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值