Ⅰ 滥用android ClipData会有什么后果
当使用Android的Clipboard框架,将数据转换成一个剪切对象,然后将剪切对象传递到系统剪贴板。剪贴板同一时间只允许存在一个剪切对象,当应用在剪切板中传递一个剪切对象,前面一个剪切对象就会被移除。应用也不需要请求任何特殊许可就能对剪切板进行读取/写入。
coerceToText()
ClipData.Item是ClipData中的一个item,在ClipData.Item中有一个名为coerceToText()的十分有趣的公共操作方法。该方法会将ClipData.Item中的数据转换为文本,无论其数据类型。
因为两者截然不同,所以他会更添趣味:
1.它可以创建一个包含了Intent的ClipData,并将其放入全局剪切板中。
2.coerceToText()内部机制中会调用getIntent()。如果ClipData.Item中的Intent对象不为null,那么数据会被转换为Intent URI
另外,ClipboardManager提供了一个监听器,当primaryClipData有变化时就会提醒你,也就是说当添加了一些新的东西,它会进行提醒。
通过ClipData进行攻击
假说有一个应用通过某种类型的用户交互在剪切板中创建,增加一个包含了被认为是“公用”组件的Intent对象的ClipData
final ClipboardManager clipboardManager = (ClipboardManager)
getSystemService(Context.CLIPBOARD_SERVICE);
Intent intent = new Intent(getApplicationContext(),
PublicActivity.class);
intent.setAction("android.intent.action.VIEW");
intent.putExtra("ExtraString", "foobar");
ClipData setClipData;
setClipData = ClipData.newIntent("intent", intent);
clipboardManager.setPrimaryClip(setClipData);
恶意应用可能会设置一个监听器来接收新增ClipData的通知