安卓應用安全指南4.7使用可瀏覽的意圖
4.7 使用可瀏覽的意圖
原書:Android Application Secure Design/Secure Coding Guidebook
譯者:飛龍
Android 應用可以設計為從瀏覽器啟動,並對應網頁連結。 這個功能被稱為“可瀏覽的意圖”。 通過在清單檔案中指定 URI 模式,應用將響應具有其 URI 模式的連結轉移(使用者點選等),並且應用以連結作為引數啟動。
此外,使用 URI 模式從瀏覽器啟動相應應用的方法不僅支援 Android,也支援 iOS 和其他平臺,這通常用於 Web 應用與外部應用之間的連結等。例如, 在 Twitter 應用或 Facebook 應用中定義了以下 URI 模式,並且在 Android 和 iOS 中從瀏覽器啟動相應的應用。
表 4.7-1
URL 模式 | 相應應用 |
---|---|
fb:// |
|
twitter:// |
考慮到聯動性和便利性,功能似乎非常方便,但存在一些風險,即該功能被惡意第三方濫用。 可以假設的是,它們濫用應用功能,通過準備一個惡意網站,它的連結的 URL 具有不正確的引數,或者它們通過欺騙智慧手機使用者安裝惡意軟體,它包含相同的 URI 模式,來獲取包含在 URL 中的資訊。 使用“可瀏覽的意圖”來對付這些風險時有一些要注意的地方。
4.7.1 示例程式碼
使用“可瀏覽的意圖”的應用的示例程式碼如下:
要點:
1) (網頁側)不得包含敏感資訊。
2) 仔細和安全地處理 URL 引數。
Starter.html
<html>
<body>
<!-- *** POINT 1 *** Sensitive information must not be included -->
<!-- Character strings to be passed as URL parameter, should be UTF-8 and URI encoded. -->
<a href="secure://jssec?user=user_id"> Login </a>
</body>
</html>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:allowBackup="false" >
<activity
android:name=".BrowsableIntentActivity"
android:label="@string/title_activity_browsable_intent"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
// Accept implicit Intent
<category android:name="android.intent.category.DEFAULT" />
// Accept Browsable intent
<category android:name="android.intent.category.BROWSABLE" />
// Accept URI `secure://jssec`
<data android:scheme="secure" android:host="jssec"/>
</intent-filter>
</activity>
</application>
</manifest>
BrowsableIntentActivity.java
package org.jssec.android.browsableintent;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.TextView;
public class BrowsableIntentActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_browsable_intent);
Intent intent = getIntent();
Uri uri = intent.getData();
if (uri != null) {
// Get UserID which is passed by URI parameter
// *** POINT 2 *** Handle the URL parameter carefully and securely.
// Omitted, since this is a sample. Please refer to "3.2 Handling Input Data Carefully and Securely."
String userID = "User ID = " + uri.getQueryParameter("user");
TextView tv = (TextView)findViewById(R.id.text_userid);
tv.setText(userID);
}
}
}
4.7.2 規則書
使用“可瀏覽的意圖”時,需要遵循以下規則:
4.7.2.1 (網頁端)敏感資訊不得包含在相應連結的引數中(必需)
當點選瀏覽器中的連結時,會發出一個意圖,該意圖的資料中有 URL 值(可以通過Intent#getData
獲取),並且帶有相應意圖過濾器的應用,從 Android 系統啟動。
此時,當幾個應用設定意圖過濾器來接收相同的 URI 模式時,應用選擇對話方塊將顯示,與隱式意圖正常啟動相同,並啟動使用者選擇的應用。 如果應用選擇對話方塊中列出了惡意軟體,則使用者可能會錯誤地啟動惡意軟體,並將 URL 中的引數傳送到惡意軟體。
如上所述,需要避免直接在 URL 引數中包含敏感資訊,因為它用於建立一般網頁連結,所有包含在網頁連結 URL 中的引數都可以提供給惡意軟體。
使用者 ID 和密碼包含在 URL 中的例子:
insecure://sample/login?userID=12345&password=abcdef
此外,即使 URL 引數僅包含非敏感內容,如使用者ID,在由’可瀏覽的意圖’啟動後,在應用中輸入密碼時,使用者可能會啟動惡意軟體並向其輸入密碼。所以應該考慮,一些規範,例如整個登入過程,在應用端完成。 在設計應用時必須記住它,並且由’可瀏覽的意圖’啟動應用,等同於由隱式意圖啟動,並且不保證啟動了有效的應用。
4.7.2.2 小心和安全地處理 URL 引數(必需)
傳送給應用的 URL 引數,並不總是來自合法的 Web 頁面,因為匹配 URI 模式連結不僅可以由開發者生成,也可以由任何人生成。 另外,沒有方法可以驗證 URL 引數是否從有效網頁傳送。
因此,在使用 URL 引數之前,有必要驗證 URL 引數的安全性,例如,檢查是否包含意外值。
相關文章
- 安卓應用安全指南4.5.2使用SQLite規則書安卓SQLite
- 安卓應用安全指南翻譯完成安卓
- 安卓應用安全指南4.1.2建立/使用活動規則書安卓
- 安卓應用安全指南4.8輸出到LogCat安卓GC
- 安卓應用安全指南六、困難問題安卓
- 安卓應用安全指南4.1.1建立/使用活動示例程式碼安卓
- 安卓應用安全指南4.3.1建立/使用內容供應器示例程式碼安卓
- 5個最佳開源的瀏覽器安全應用瀏覽器
- 安卓圖片瀏覽(支援超大圖,附原始碼)安卓原始碼
- Web 應用安全性: 瀏覽器是如何工作的Web瀏覽器
- 安卓應用安全指南4.2.3建立/使用廣播接收器高階話題安卓
- 安卓應用安全指南 5.6.1 密碼學 示例程式碼安卓密碼學
- 安卓應用安全指南4.6.1處理檔案示例程式碼安卓
- 實用的Google安全瀏覽診斷工具Go
- 安卓應用安全指南5.5.2處理隱私資料規則書安卓
- 安卓應用安全指南5.4.1通過HTTPS的通訊示例程式碼安卓HTTP
- 使用瀏覽器的 Local Storage 真的安全嗎?瀏覽器
- 瀏覽器的安全管理瀏覽器
- 如何檢測手機惡意應用?整合華為應用安全檢測,提升App使用安全APP
- 新版 Edge 瀏覽器現可阻止潛在有害應用程式下載瀏覽器
- IE瀏覽器的安全(轉)瀏覽器
- 手機 via瀏覽器 無法登入 此瀏覽器或應用可能不安全。 瞭解詳情 請嘗試使用其他瀏覽器。如果您使用的是受支援的瀏覽器 可以重新嘗試登入。瀏覽器
- 瀏覽器安全(一)瀏覽器
- 開發更安全的安卓應用要注意哪些?安卓
- 基於瀏覽器的桌面級別應用瀏覽器
- html背景圖片自適應瀏覽器HTML瀏覽器
- 蘋果瀏覽器應用實戰(二)蘋果瀏覽器
- 50多個惡意安卓應用繞過Google Play,感染了3000萬安卓使用者安卓Go
- 國內安卓端瀏覽器調研安卓瀏覽器
- 蘋果迴應向騰訊傳輸瀏覽器資料,稱是標記惡意網址的安全功能蘋果瀏覽器
- 構建現代Web應用的安全指南Web
- Python/Sqlite 程式:瀏覽器應用還是桌面應用?PythonSQLite瀏覽器
- 使用 javascript 獲取瀏覽器(或 WKWebView)的安全區資訊JavaScript瀏覽器WebView
- jquery在瀏覽器滾動條上的應用jQuery瀏覽器
- 瀏覽器跨域安全瀏覽器跨域
- SAP Corbu Theme 在瀏覽器和 SAPGUI 應用中的使用場景ORB瀏覽器GUI
- 安卓瀏覽器看背景圖片有些裝置會模糊解決方案安卓瀏覽器
- 洞悉安卓應用的電池使用狀況安卓