Android——应用安全相关(二)

1,关于安卓的剪切板风险. 

手机里面的几乎所有的程序都能访问剪切板,甚至一些权限不高的APP都可以通过剪贴板功能获取我们复制或者剪切的信息。如果我们复制或者剪切账户密码信息,很容易就被嗅探泄密,原因是Android剪贴板的内容向任何权限的app开放 .如果是明文内容将会有信息泄露的风险,

首先可能有的人不是很熟悉,安卓的剪切板,我在先说一下安卓剪切板的用法.

1,先获取一个Manger的对象,和获取大多管理服务一样,在上下文的环境中调用 getSystemService(CLIPBOARD_SERVICE);获取一个剪切板管理器对象 取名为manager ,强转成ClipboardManager;

2.现在有一个管理器对象了,还有有一个存放剪切的内容的地方就是ClipData,这个对象不是new出来的而是通过静态方法ClipData.newPlainText(CharSequence label, CharSequence text), 
ClipData.newIntent(CharSequence label, Intent intent), 
ClipData.newUri(ContentResolver resolver, CharSequence label, 
Uri uri) 获得的,分别对应存储的三种类型的数据: 文本,Intent,URL. 
这里我以复制密码为例 :

// 剪切板数据
        ClipData clip = ClipData.newPlainText("password", "helloworld123456");

3.现在剪切板管理对象有了,数据对象也有了,就把数据通过manager放进剪切板里面.

manager.setPrimaryClip(clip);

现在剪切板就使用完成了,这里我模拟复制了密码,现在剪切板里面的内容可以别任意APP读取,可想而知,这里应该是代码安全的注意点.

现在我们看一下如何读取剪切板的数据 

如下代码可以在任意APP中读取剪切板的文字内容:

ClipboardManager cm = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);

ClipData cd2 = cm.getPrimaryClip();

str2 = cd2.getItemAt(0).getText().toString();

修改方法: 

使用完clipboard及时清空,并避免使用剪贴板明文存储敏感信息 

我找了API但是没有找到清空的方法,这里我们可以这样给他清空

ClipData data = ClipData.newPlainText("password", "");

manager.setPrimaryClip(data);

一句话 : 使用安卓剪切板的时候注意清空,并避免使用剪贴板明文存储敏感信息!

2 安卓应用截屏安全风险

解析:我们开发程序的地方可能有的地方不想让用户截屏,或者不想让其他程序为我们截屏,需要注意的地方

解决: 
加入一行代码就可以解决: 
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); 

这样就能防止应用截屏了

3 Database配置模式安全风险

代码描述:安卓数据库创建代码。 

代码:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
try {
database = openOrCreateDatabase("login.db",
    Context.MODE_WORLD_READABLE, null);
database.execSQL(CREATE_TABLE);   
} catch (SQLiteException e) {
 e.printStackTrace();
} 
et_name = (EditText) findViewById(R.id.et_name);
et_password = (EditText) findViewById(R.id.et_password);
btn_login = (Button) findViewById(R.id.btn_login);
解析: 
Database配置模式安全风险源于:1)开发者在创建数据库(Database)时没有正确的选取合适的创建模式(MODE_PRIVATE、MODE_WORLD_READABLE以及MODE_WORLD_WRITEABLE)进行权限控制,从而导致数据库(Database)内容被恶意读写,造成账户密码、身份信息、以及其他敏感信息的泄露,甚至攻击者进一步实施恶意攻击。 
如果在开发中没有使用正确的创建模式数据库(Database)文件,将会导致敏感信息泄露危害,如个人账户密码、身份信息以及金融账户等重要敏感信息。 
**修改方法: 

避免使用MODE_WORLD_WRITEABLE和MODE_WORLD_READABLE模式创建数据库(Database),权限不要开方太大,安全建议不要使用全局可读模式和全局可写模式创建数据库;**

4 安卓LogCat安全风险

代码描述:LogCat打印敏感调试信息。

解析: 
Logcat是我们开发中最常用的了,用它打印信息,看程序是否执行到了这里,和输出一些信息帮助我们开发程序,可是我们在打印的过程中,常常可能会打印一些关键的信息,如用户名,密码,接获取到有价值的隐私敏感信息。.还有可能会让攻击者更加容易了解APP内部结构,方便破解和攻击.

修改方法: 
禁止隐私信息的log,设置布尔值来控制打印信息,或者使用ProGuard等工具在APP的发行版本(release)中自动删除Log.d()和Log.v()对应的代码.

5 安卓debuggable安全风险

代码描述:安卓manifest.xml文件功能代码。

 <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" 
        android:debuggable="true">
解析: 
android:debuggable=”true”应用存在debug调试风险 
debuggable 属性有两个值“true|false”; 
只有Android:debuggable=”true”时我们才可以在手机上调试Android程序。 
但是当我们没在AndroidManifest.xml中设置其debug属性时: 
使用Eclipse运行这种方式打包时其debug属性为true,使用Eclipse导出这种方式打包时其debug属性为法false. 

在使用ant打包时,其值就取决于ant的打包参数是release还是debug.

6 SharedPreferences存储数据 
解析: 
在保存特殊数据时,没有对特殊数据进行加密处理,存在数据信息泄漏风险。开放的权限不要太大.

修改: 
1.将Context.MODE_WORLD_READABLE改为Context.MODE_PRIVATE 
Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取。 
Context.MODE_PRIVATE:表示当前文件为默认操作模式,代表该文件是私有数据,只能被应用本身访问。 
2.对存储的数据采用MD5方式加密

ps : 
MD5算法具有以下特点: 
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。 
2、容易计算:从原数据计算出MD5值很容易。 
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。 
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。 
5、不可逆性:知道MD5值不会得到原数据.




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值