HTTP 要求包含「User-Agent」或 Content-Type 等標頭。除了附加標頭外,
瀏覽器,Android 應用程式可能會透過
EXTRA_HEADERS
意圖額外項目。基於安全考量,Chrome 會篩除部分額外的標頭
取決於意圖啟動方式和位置
跨來源要求需要多一層安全措施,因為用戶端和伺服器 並非由同一方擁有。本指南說明如何透過 Chrome 啟動這類要求 自訂分頁,也就是從應用程式啟動的意圖,會在瀏覽器分頁中開啟網址。停用 Chrome 83,開發人員可以在啟動「自訂分頁」時加入任何標頭。從第 83 版起 開始篩選所有未列入核准跨來源標頭的標頭,因為未列入許可清單的標頭 暴露在安全風險中。從 Chrome 第 86 版開始,您可以將未核准的標頭附加至 跨來源請求 (在伺服器和用戶端使用 Digital 資產連結產生關聯時)。 下表摘要說明這項行為:
Chrome 版本 | 允許的 CORS 標頭 |
---|---|
Chrome 83 以下版本 | 已加入許可清單,但未列入許可清單 |
Chrome 83 到 Chrome 85 | 已列入核准清單 |
(Chrome 86 以上版本) | 在設定數位資產連結時,已加入許可清單,但未列入許可清單 |
表 1.:篩選未列入許可清單的 CORS 標頭。
本文說明如何在伺服器和用戶端之間設定已驗證連線,以及如何使用 傳送核准清單以及未列入許可清單的 http 標頭。您可以直接跳到 針對程式碼在自訂分頁意圖中加入額外的標頭。
背景
核准清單與未列入核准的 CORS 要求標頭
跨源資源共享 (CORS) 可讓來自某個來源的網頁應用程式發出要求 不同來源的資源CORS-approvelisted 標頭清單會保留在 HTML 標準。已加入許可清單的標頭範例如下表所示:
標題 | 說明 |
---|---|
accept-language | 宣傳客戶能理解的自然語言 |
content-language | 描述目前目標對象的語言 |
內容類型 | 會指出資源的媒體類型 |
表 2.:核准列出的 CORS 標頭範例。
系統會將核准清單中的標頭視為安全,因為標頭不含敏感內容 使用者資訊,且不太可能會使伺服器執行可能破壞性的作業。
下表列舉了未列入許可清單的標頭:
標題 | 說明 |
---|---|
bearer-token | 在伺服器上驗證用戶端 |
起源 | 表示要求來源 |
餅乾 | 包含伺服器設定的 Cookie |
表 3.:未列入許可清單的 CORS 標頭範例。
HTML 標準和伺服器不建議將未列入許可清單的標頭附加至 CORS 要求 我們會假設跨來源要求僅包含已加入許可清單的標頭。傳送未列入許可清單的標頭 來自跨來源網域的項目,可讓惡意第三方應用程式建立濫用使用者的標頭 Chrome (或其他瀏覽器) 儲存並附加至要求中的 Cookie。Cookie 可以將 驗證無法透過此方式進行的惡意伺服器交易。
將 CORS 核准清單標頭附加至自訂分頁要求
自訂分頁是一種特殊的方式,用於在自訂的瀏覽器分頁中開啟網頁。自訂分頁
意圖可使用 CustomTabsIntent.Builder()
建立您也可以附加標頭
使用帶有 Browser.EXTRA_HEADERS
標記的 Bundle
的意圖:
CustomTabsIntent intent = new CustomTabsIntent.Builder(session).build();
Bundle headers = new Bundle();
headers.putString("bearer-token", "Some token");
headers.putString("redirect-url", "Some redirect url");
intent.intent.putExtra(Browser.EXTRA_HEADERS, headers);
intent.launchUrl(Activity.this, Uri.parse("http://www.google.com"));
我們隨時可以將核准清單標頭附加到自訂分頁 CORS 要求。不過,Chrome 篩選器 未列入許可清單的標頭。雖然其他瀏覽器可能會有不同的行為 開發人員應一般會封鎖未列入許可清單的標頭。
如要在自訂分頁中納入未列入許可清單的標頭,支援的做法是先驗證 使用數位存取連結進行跨來源連線下一節將說明如何設定這些 使用必要標頭啟動 Custom Tabs 意圖。
在自訂分頁意圖中加入額外標頭
設定 Digital Asset Links
如要允許未列入許可清單的標頭透過「自訂分頁」意圖傳遞,必須 為 Android 和網頁應用程式建立數位資產連結,以驗證作者 使用者擁有兩個應用程式
請按照官方指南設定數位資產連結。連結關聯的使用方式 「Delegate_permission/common.use_as_origin」表示。 驗證來源。
使用額外標頭建立自訂分頁意圖
您可以透過多種方式建立自訂分頁意圖。您可以使用 ,方法是將程式庫新增至建構依附元件:
MULTI_LINE_CODE_PLACEHOLDER_1
建立意圖並新增額外標頭:
MULTI_LINE_CODE_PLACEHOLDER_2
設定自訂分頁連線以驗證資產連結
「自訂分頁」連線可用於設定應用程式CustomTabsSession
和
Chrome 分頁。我們需要使用工作階段,驗證應用程式和網頁應用程式屬於同一來源。
只有在數位資產連結設定正確時,系統才會通過驗證。
建議您呼叫 CustomTabsClient.warmup()
。可讓瀏覽器應用程式
在背景預先初始化,並加快網址開啟程序的速度。
MULTI_LINE_CODE_PLACEHOLDER_3
設定在驗證後啟動意圖的回呼
CustomTabsCallback
已傳入工作階段。我們將
onRelationshipValidationResult()
:啟動先前建立的 CustomTabsIntent
,待來源驗證成功後。
MULTI_LINE_CODE_PLACEHOLDER_4
繫結自訂分頁服務連線
繫結服務會啟動服務以及連線的 onCustomTabsServiceConnected()
最終都會呼叫請務必正確解除服務繫結。繫結與取消繫結
通常在 onStart()
和 onStop()
活動生命週期方法中完成。
// Bind the custom tabs service connection.
// Call this in onStart()
CustomTabsClient.bindCustomTabsService(this,
CustomTabsClient.getPackageName(MainActivity.this, null), connection);
// …
// Unbind the custom tabs service.
// Call this in onStop().
unbindService(connection);
試用版應用程式程式碼
如要進一步瞭解自訂分頁服務,請參閱這篇文章。詳情請參閱 android-browser-helper GitHub 存放區找到實際範例應用程式。
摘要
本指南說明如何將任意標頭新增至自訂分頁 CORS 要求。 核准列出的標頭可以附加至每個自訂分頁 CORS 要求。未列入許可清單的標題為 CORS 要求通常會視為不安全,且 Chrome 會預設篩除這類要求。附加它們是 僅用於來源相同,並透過數位資產連結驗證的用戶端和伺服器。