Ⅰ 濫用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的通知