更新:Stripe 針對使用者追蹤的回應
上週,我發表了一篇部落格文章,描述 Stripe 如何在其客戶的網站上記錄訪客行為。簡而言之,即使網站從未顯示任何 Stripe 付款表單,Stripe 的 JavaScript 程式庫仍會蒐集使用者造訪的 URL 資訊以及滑鼠移動的遙測資料。我懷疑大多數 Stripe 客戶並未察覺此事,並主張 Stripe 應該更顯眼、更詳細地揭露其資料蒐集做法。
這篇文章在 Hacker News 上引發了熱烈的討論,其中包括來自 Stripe 共同創辦人暨執行長 Patrick Collison(派翠克·科里森)的多則留言。在他獲得最多推文的留言中,他說道:
所提出的問題(「Stripe 是否為了廣告而蒐集這些資料?」)可以明確地以否定作答。這些資料從未、永遠不會、也絕不會被出售/出租/等等給廣告商。
有幾位留言者回應表示感謝他的保證,但希望在 Stripe 的服務條款與隱私權政策中看到具官方效力且有約束力的文字。
在我的文章發表不到一週後,Stripe 便發表了一篇部落格文章,概述他們為更清楚揭露資料蒐集做法及對使用者隱私的保障所做的變更。
我已審閱他們的新文件,接下來將討論 Stripe 的這些變更有何種程度回應了我所提出的問題。
Stripe 的變更
開發者文件明確揭露追蹤功能
對我而言,最重大的變更在於 Stripe 的開發者文件現在會揭露其 JavaScript 程式庫的追蹤行為。在昨天的變更之前,唯一的提示只有這兩句話:
為了充分運用 Stripe 的進階詐欺防護功能,請確保 Stripe.js 在每個頁面都會載入,而不僅僅是結帳頁面。這能讓 Stripe 在顧客瀏覽您的網站時偵測可能顯示詐欺跡象的異常行為。
這段說明省略了關鍵資訊,未能傳達該程式庫蒐集了哪些資訊,以及如何將這些資料分享給 Stripe 的伺服器。
在 Stripe 目前的文件中,該程式庫包含一個名為「停用進階詐欺偵測訊號」的章節,其中連結到一個明確定義 Stripe 為防範詐欺而蒐集之資訊類型的網頁。

Stripe 全新的詐欺偵測文件更明確地說明了 Stripe 如何蒐集使用者資料。
Stripe 客戶可選擇停用追蹤
Stripe 已更新其 JavaScript 程式庫,讓客戶能夠選擇退出深度資料蒐集。客戶現在可以在載入 <script> 標籤時加上 advancedFraudSignals=false 參數來停用此功能:
<script src="https://js.stripe.com/v3/?advancedFraudSignals=false"></script>使用 @stripe/stripe-js npm 套件的客戶,也可以在初始化程式庫時指定 {advancedFraudSignals: false} 來使用此功能:
import { loadStripe } from "@stripe/stripe-js/pure";
loadStripe.setLoadParameters({ advancedFraudSignals: false });
const stripe = await loadStripe("pk_test_TYooMQauvdEDq54NiTphI7jx");這是一項正面的改變,因為它將權力還給網站擁有者,讓他們自行決定願意用多少資料來換取更好的詐欺防護。
隱私權政策現在明確禁止 Stripe 出售使用者資料
週三,Stripe 大幅修訂了其隱私權政策。這些修訂對 Stripe 處理使用者資料及與外部夥伴分享資料的方式設下更嚴格的限制。
我製作了隱私權政策完整變更的差異對照,但在此僅重點標示值得注意的部分。
- 廣告聯播網與使用者資料販售相關內容已移除
在我的原始部落格文章中,我點出了 Stripe 隱私權政策中這段令人擔憂的內容:
當您造訪我們的網站或線上服務時,我們與特定第三方會長期蒐集您在不同網站上的線上活動資訊,以便向您提供依個人興趣量身打造的產品與服務廣告(此類廣告稱為「興趣導向廣告」)。
Stripe 原本也有允許自己與 AdWords 和 AdRoll 等廣告夥伴分享資料的文字:
我們與 Google AdWords、Doubleclick、AdRoll 及其他廣告聯播網合作。
Stripe 已刪除了上述兩段內容。其新版文字清爽而直接:Stripe 不會將客戶資料出售給廣告商:
我們不會為了興趣導向廣告而使用、分享、出租或出售使用者客戶的個人資料。我們不會出售或出租使用者、其客戶或我們網站訪客的個人資料。
- 即使在公司出售後,使用者資料仍受保護
在 Hacker News 上的討論中,有使用者表達擔憂,認為儘管 Stripe 目前立意良善,若未來有其他公司收購 Stripe,使用者資料仍可能落入不當之手。派翠克·科里森回應道:
我會詢問我們的法務團隊,是否能以某種合約方式預先排除我們在清算等情況下分享這些資料,或以其他有用的方式約束我們……
或許是直接回應了那次交流,新版隱私權政策加入了以下條款:
任何收購我們或我們部分業務的其他實體,將有權繼續使用您的個人資料,但僅能以本隱私權政策所訂定的方式為之,除非您另行同意。
我仍希望看到的變更
我對 Stripe 迅速且周全的變更印象深刻,但仍有我認為需要改進之處。我已直接向 Stripe 表達這些疑慮,他們表示未來有計畫處理。
更明確地揭露 URL 蒐集
在 Stripe 專門的詐欺偵測頁面上,他們有一個名為「Types of signals」的章節,說明他們作為詐欺偵測的一環,會向終端使用者蒐集哪些資訊。
在我的部落格文章中,我指出 Stripe 會蒐集使用者造訪的每個頁面的完整 URL,包括查詢字串(例如 example.com?userId=michael)和 URL 片段(例如 example.com#key=1234)。Stripe 至今仍未清楚說明他們正在蒐集這些資訊。他們最接近的說明是以下這段(強調為筆者所加):
進階詐欺偵測訊號還包括來自購物體驗的活動指標,有助於我們區分合法購物者與詐欺性購買者和機器人……這些訊號包括滑鼠活動指標以及使用者在購物體驗中於不同頁面上停留的時間,兩者皆可在整個工作階段期間預測類似機器人的行為。
一般人能從這段文字推斷出 Stripe 會蒐集完整 URL 嗎?我對此存疑。
或許您對將敏感資料儲存在查詢字串中的網頁應用程式毫無同情,因為那是被廣泛認定為不安全的模式。URL 片段的問題則更為嚴重。該方式本身是儲存敏感資訊的安全做法,因此看到第三方程式庫將其副本傳送至外部伺服器令人憂心。
Firefox Send 與 Mega.nz 都是使用 URL 片段來儲存用戶端加密金鑰的熱門網頁應用程式範例,讓使用者能將端對端加密的檔案儲存至雲端,而伺服器從未存取底層資料。若 Stripe 的 JS 程式庫在採用類似機制的網站上執行,其程式庫就會將敏感的加密金鑰外洩至 Stripe 的伺服器。

熱門的檔案分享應用程式 Mega.nz 將敏感的加密金鑰儲存在 URL 片段欄位中
支援程式庫卸載
雖然 loadStripe 函式與/pure 匯入路徑賦予整合者決定何時啟用 Stripe 的能力,但目前仍沒有辦法將 Stripe 關閉。
假設您想在結帳流程中啟用 Stripe 的進階詐欺偵測,但在交易完成後希望停止與 Stripe 分享資料。目前唯一的做法是強制重新整理頁面。
若 Stripe 能提供像 unloadStripe 這樣簡單的函式,在應用程式不再需要時動態停用追蹤,會是更好的做法。
為什麼這一切很重要?
透過納入第三方 JavaScript 套件,網站擁有者賦予了這些程式庫極大的信任。憑藉在使用者瀏覽器中執行程式碼的能力,JavaScript 程式庫掌握了王國的鑰匙。它們能存取使用者所能看到的所有資訊,並能以使用者的權限在網站上執行動作。
網站擁有者有責任(在某些司法管轄區,這是法律責任)了解其網站直接或透過第三方程式庫蒐集了哪些資訊。Stripe 展現負責任的資料管理固然值得肯定,但網站擁有者仍須持續主張自身權利,去了解外部夥伴蒐集了哪些資料,以及這些夥伴對資料的處理提供了哪些保證與限制。
隨機一篇部落格
