安卓應用安全指南5.5.2處理隱私資料規則書

apachecn_飛龍發表於2018-04-05

5.5.2 處理隱私資料 規則書

原書:Android Application Secure Design/Secure Coding Guidebook

譯者:飛龍

協議:CC BY-NC-SA 4.0

處理隱私策略時,遵循以下規則:

5.5.2.1 將使用者資料的傳輸限制為最低需求(必需)

將使用資料傳輸到外部伺服器或其他目標時,將傳輸限制在提供服務的最低需求。 特別是,你應該設計為,應用只能訪問這些使用者資料,使用者可以根據應用描述來想象它們的使用目的。

例如,使用者可以想象,它是個警報應用,但不能訪問位置資料。另一方面,如果警報應用可以根據使用者的位置發出警報,並將其功能寫入應用的描述中,則應用可以訪問位置資料。

在只需要在應用中訪問資訊的情況下,避免將資訊傳輸到外部,並採取其他措施來減少無意中洩漏使用者資料的可能性。

5.5.2.2 在首次載入(或應用更新)時,獲得廣泛同意來傳輸需要特別細緻處理或使用者可能難以更改的使用者資料(必需)

如果應用向外部伺服器,傳輸使用者可能難以更改的任何使用者資料,或需要特別細緻處理的任何使用者資料,則應用必須在使用者開始使用之前,獲得使用者的預先同意(選擇性加入) – 通知使用者哪些型別的資訊將被髮送到伺服器,以及是否會涉及任何第三方廠商。 更具體地說,首次啟動時,應用應顯示其應用隱私政策並確認該使用者已閱讀並同意。 此外,無論何時應用更新,通過將新型別的使用者資料傳輸到外部伺服器,它都必須再次確認使用者已經閱讀並同意這些更改。 如果使用者不同意,應用應該終止或以其他方式採取措施,來確保所有需要傳輸資料的功能都被禁用。

這些步驟可以確保,使用者瞭解他們在使用應用時如何處理資料,為使用者提供安全感並增強他們對應用的信任。

MainActivity.java

protected void onStart() {
    super.onStart();

    // (some portions omitted)

    if (privacyPolicyAgreed <= VERSION_TO_SHOW_COMPREHENSIVE_AGREEMENT_ANEW) {
        // *** POINT *** On first launch (or application update), obtain broad consent to transmit user data that will be handled by the application.
        // When the application is updated, it is only necessary to renew the user’s grant of broad consent if the updated application will handle new types of user data.
        ConfirmFragment dialog = ConfirmFragment.newInstance(
            R.string.privacyPolicy, R.string.agreePrivacyPolicy,
            DIALOG_TYPE_COMPREHENSIVE_AGREEMENT);
        dialog.setDialogListener(this);
        FragmentManager fragmentManager = getSupportFragmentManager();
        dialog.show(fragmentManager, "dialog");
    }

5.5.2.3 在傳輸需要特殊處理的使用者資料之前獲得特定的同意(必需)

向外部伺服器傳輸任何需要特別細緻處理的使用者資料時,除了需要獲得一般同意之外,應用必須獲得使用者對每種這類使用者資料(或涉及傳輸使用者資料的每個功能)的預先同意(選擇性加入)。 如果使用者不同意,則應用不得將相應的資料傳送到外部伺服器。 這確保使用者可以更全面地瞭解應用的功能(及其提供的服務)和使用者對其授予一般同意的,使用者資料的傳輸之間的關係;同時,應用提廠商可以基於更精確的決策,預計獲得使用者的同意。

MainActivity.java

public void onSendToServer(View view) {
    // *** POINT *** Obtain specific consent before transmitting user data that requires particularly delicate handling.
    ConfirmFragment dialog = ConfirmFragment.newInstance(R.string.sendLocation, R.string.cofi
    rmSendLocation, DIALOG_TYPE_PRE_CONFIRMATION);
    dialog.setDialogListener(this);
    FragmentManager fragmentManager = getSupportFragmentManager();
    dialog.show(fragmentManager, "dialog");
}

5.5.2.4 向使用者提供檢視應用隱私策略的方法(必需)

一般來說,Android 應用市場將提供應用隱私策略的連結,供使用者在選擇安裝相應的應用之前進行復查。 除了支援此功能之外,應用還需要提供一些方法,使用者在裝置上安裝應用後,可以檢視應用隱私策略。 特別重要的是提供一些方法,使用者可以輕易複查應用隱私政策。在同意的情況下,將使用者資料傳輸到外部伺服器來協助使用者作出適當決定。

MainActivity.java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_show_pp:
            // *** POINT *** Provide methods by which the user can review the application privacy policy.
            Intent intent = new Intent();
            intent.setClass(this, WebViewAssetsActivity.class);
            startActivity(intent);
            return true;

5.5.2.5 在素材資料夾中放置應用隱私策略的摘要版本(推薦)

將應用隱私策略的摘要版本放在素材資料夾中,來確保使用者可以按需對其進行復查,這是一個不錯的主意。 確保素材資料夾中存在應用隱私策略,不僅可以讓使用者隨時輕鬆訪問它,還可以避免使用者看到由惡意第三方準備的應用隱私策略的偽造或損壞版本的風險。

5.5.2.6 提供可以刪除傳輸的資料的方法,以及可以通過使用者操作停止資料傳輸的方法(推薦)

提供根據使用者需要,刪除傳輸到外部伺服器的使用者資料的方法,是一個好主意。與之相似,在應用本身已經在裝置記憶體儲使用者資料(或其副本)的情況下,向使用者提供用於刪除該資料的方法是一個好主意。而且,提供可以根據使用者要求停止使用者資料傳送的方法,是一個好主意。

這一規則(建議)由歐盟推行的“被遺忘權”編纂而成;更普遍的是,在未來,各種提案將要求進一步加強使用者保護其資料的權利,這看起來很明顯。為此在這些指導方針中,我們建議提供刪除使用者資料的方法,除非有一些具體原因不能這樣做。並且,停止資料傳輸,主要由瀏覽器的對應觀點“不追蹤(否定追蹤)”定義。

MainActivity.java


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        (some portions omitted)

        case R.id.action_del_id:
            // *** POINT *** Provide methods by which transmitted data can be deleted by user
            operations.
            new SendDataAsyncTack().execute(DEL_ID_URI, UserId);
            return true;
    }

5.5.2.7 從 UUID 和 Cookie 中分離裝置特定的 ID(推薦)

不應通過與使用者資料繫結的方式傳輸 IMEI 和其他裝置特定 ID。 事實上,如果一個裝置特定的 ID 和一段使用者資料被捆綁在一起,併發布或洩露給公眾 – 即使只有一次 – 隨後也不可能改變該裝置特定的 ID,因此對於把 ID 和使用者資料繫結的伺服器來說,這是不可能的(或至少 很難)。 在這種情況下,最好使用 UUID 或 cookie(即每次基於隨機數重新生成的變數 ID),與使用者資料一起傳輸時代替裝置特定的 ID。 這允許實現上面討論的“被遺忘的權利”的概念。

MainActivity.java

@Override
protected String doInBackground(String... params) {
    // *** POINT *** Use UUIDs or cookies to keep track of user data
    // In this sample we use an ID generated on the server side
    SharedPreferences sp = getSharedPreferences(PRIVACY_POLICY_PREF_NAME, MODE_PRIVATE);
    UserId = sp.getString(ID_KEY, null);
    if (UserId == null) {
        // No token in SharedPreferences; fetch ID from server
        try {
            UserId = NetworkUtil.getCookie(GET_ID_URI, "", "id");
        } catch (IOException e) {
            // Catch exceptions such as certification errors
            extMessage = e.toString();
        }
        // Store the fetched ID in SharedPreferences
        sp.edit().putString(ID_KEY, UserId).commit();
    }
    return UserId;
}

5.5.2.8 如果你只在裝置內使用使用者資料,請通知使用者,資料不會傳輸到外部(推薦)

即使在使用者資料只在使用者裝置中臨時訪問的情況下,向使用者傳達這一事實也是一個好主意,來確保使用者充分和透明地理解了應用行為。 更具體來說,應該告知使用者,應用訪問的使用者資料只在裝置內用於特定的目的,不會被儲存或傳送。 將此內容傳達給使用者的可能方法,包括在應用市場上的應用描述中指定它。 僅在裝置中臨時使用的資訊,不需要在應用隱私策略中討論。


相關文章