Update: Stripe's Response Regarding User Tracking

Michael Lynch

更新:Stripe 針對使用者追蹤的回應

原文由 Michael Lynch 發布,訂閱此部落格

上週,我發表了一篇部落格文章,說明 Stripe 如何在其客戶的網站上記錄訪客行為。簡而言之,Stripe 的 JavaScript 函式庫會收集使用者造訪過的網址資訊,以及關於滑鼠移動的遙測資料,即使該網站從未顯示任何 Stripe 付款表單。我懷疑大多數 Stripe 客戶並不知道這件事,並主張 Stripe 應該更醒目、更詳細地揭露其資料收集的做法。

這篇文章在 Hacker News 上引發了熱烈的討論,其中包括 Stripe 共同創辦人暨執行長 Patrick Collison 的數則留言。在他的置頂留言中,他說:

對於被提出的問題(「Stripe 收集這些資料是為了廣告嗎?」),可以明確地給出否定的答案。這些資料從未、也永遠不會被出售、出租等給廣告商。

有幾位留言者回應,表示感謝他的保證,但希望能在 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,使用者資料仍可能落入不當之手。Patrick Collison 回應道:

我會請我們的法務團隊研究,是否能在合約上預先排除我們在清算等情況下分享這些資料的可能性,或以其他有用的方式來約束我們……

或許是直接回應了那次的交流,新版隱私權政策中加入了這項條款:

任何收購我們或我們部分業務的其他實體,將有權繼續使用您的個人資料,但除非您另行同意,否則僅能以本隱私權政策所規定的方式使用。

我仍希望看到的改進

Stripe 迅速而周全的調整令我印象深刻,但仍有一些我認為需要改進的地方。我已經直接向 Stripe 表達了這些疑慮,他們也表示未來有計畫處理。

應更明確地揭露網址收集行為

在 Stripe 專門的詐欺偵測頁面上,有一個名為「訊號類型」的章節,說明了他們作為詐欺偵測的一環,會向終端使用者收集哪些資訊。

在我的部落格文章中,我指出 Stripe 會收集使用者造訪的每個頁面的完整網址,包括查詢字串(例如 example.com?userId=michael)和網址片段(例如 example.com#key=1234)。Stripe 至今仍未清楚說明他們正在收集這些資訊。最接近的說明只有這一段(強調為筆者所加):

進階詐欺偵測訊號還包括來自購物體驗的活動指標,可幫助我們區分合法的購物者與詐欺性購買者及機器人……這些訊號包括滑鼠活動指標,以及使用者在購物體驗中於不同頁面上停留的時間長短,這兩者對於預測整個工作階段期間類似機器人的行為都具有參考價值。

一般人能從這樣的文字推斷出 Stripe 正在收集完整的網址嗎?我很懷疑。

或許你會認為,將敏感資料存放在查詢字串中的網頁應用程式並不值得同情,因為那早已被公認為是不安全的做法。但網址片段的問題就嚴重多了。那本來是一種安全的敏感資訊儲存方式,因此看到第三方函式庫將其複本傳送到外部伺服器,實在令人不安。

Firefox SendMega.nz 都是熱門的網頁應用程式案例,它們利用網址片段來儲存用戶端的加密金鑰,讓使用者能將經過端對端加密的檔案儲存到雲端,而伺服器從頭到尾都無法存取原始資料。如果 Stripe 的 JS 函式庫在採用類似機制的網站上執行,其函式庫就會將敏感的加密金鑰外洩到 Stripe 的伺服器。

Mega.nz 在網址片段中顯示加密金鑰的截圖

熱門的檔案分享應用程式 Mega.nz 將敏感的加密金鑰儲存在網址片段欄位中

支援卸載函式庫

雖然 loadStripe 函式與/pure 匯入路徑讓整合者有權決定何時啟用 Stripe,但目前仍沒有辦法將 Stripe 關閉。

假設你想在結帳流程中啟用 Stripe 的進階詐欺偵測,但在交易完成後就想停止與 Stripe 分享資料。目前唯一的做法是強制重新整理頁面

如果 Stripe 能提供一個像 unloadStripe 這樣簡單的函式,讓應用程式在不再需要時能動態停用追蹤,那就更好了。

為什麼這一切很重要?

透過引入第三方 JavaScript 套件,網站擁有者等於賦予了這些函式庫極大的信任。由於能夠在使用者瀏覽器中執行程式碼,JavaScript 函式庫可說是掌握了王國的鑰匙。它們可以存取使用者能看到的所有資訊,並以使用者的權限在網站上執行動作。

網站擁有者有責任(在某些司法管轄區,這甚至是法律責任)去了解其網站收集了哪些資訊,無論是自行收集還是透過第三方函式庫。Stripe 展現出負責任的資料管理態度固然值得肯定,但網站擁有者仍必須持續主張自身權利,去了解外部合作夥伴究竟收集了哪些資料、又對這些資料做出了何種限制的保證。

本文章由 muse-spark-1.2-contributor 進行翻譯

留言