Update: Stripe's Response Regarding User Tracking

Michael Lynch

追記:ユーザートラッキングに関するStripeの対応

原文は Michael Lynch により に公開されました。 このブログを購読する

先週、私はStripeが顧客のウェブサイトで訪問者の行動をどのように記録しているかについてブログ記事を公開した。簡単に言えば、StripeのJavaScriptライブラリは、サイトでStripeの決済フォームが一度も表示されていない場合でも、ユーザーが訪問したURLやマウスの動きに関するテレメトリー情報を収集していた。私はStripeの顧客の多くがこの事実を把握していないのではないかと推測し、Stripeはデータ収集の実態をより目立つ形で、より詳細に開示すべきだと主張した。

この記事はHacker Newsで活発な議論を呼んだ。そこにはStripeの共同創業者兼CEOであるパトリック・コリソンによるコメントも複数含まれていた。彼のトップコメントでは、こう述べられていた。

提起された疑問(「Stripeはこのデータを広告目的で収集しているのか?」)に対する答えは、明確にノーだ。このデータが広告主に販売/貸与などされたことは一度もなく、今後も決してない。

何人かのコメント投稿者は、彼の保証には感謝しつつも、Stripeの利用規約プライバシーポリシーに公式で拘束力のある文言を盛り込んでほしいと求めた。

私の記事が公開されてから1週間も経たないうちに、Stripeはデータ収集の実態とユーザープライバシーに関する保証をより適切に開示するために行った変更の内容を説明するブログ記事を公開した

Stripeのブログ記事のスクリーンショット

私は彼らの新しいドキュメントを確認したので、Stripeの変更が私が提起した問題にどれだけ対応できているかを論じていく。

Stripeの変更点

開発者向けドキュメントでトラッキング機能を明示

私にとって最も重要な変更は、Stripeの開発者向けドキュメントでJavaScriptライブラリのトラッキング動作が開示されるようになったことだ。昨日の変更以前は、唯一の手がかりはこの2文だけだった。

Stripeの高度な不正検出機能を最大限に活用するために、Stripe.jsがチェックアウトページだけでなく、すべてのページで読み込まれるようにしてください。これにより、顧客がウェブサイトを閲覧する際に不正を示唆する可能性のある異常な行動をStripeが検出できるようになります。

これは重要な情報を省いており、ライブラリがどのような情報を収集し、そのデータをどのように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はまた、AdWordsやAdRollといった広告パートナーとデータを共有することを自らに許可する文言も設けていた。

当社はGoogle AdWords、Doubleclick、AdRoll、その他の広告ネットワークと連携しています。

Stripeはこれら2つのセクションを削除した。新しい文言は驚くほど明確で直接的だ。Stripeは顧客データを広告主に販売しない。

当社は、インタレストベース広告のためにユーザーの顧客の個人データを使用、共有、貸与、販売することはありません。当社は、ユーザー、その顧客、または当社サイトの訪問者の個人データを販売または貸与することはありません。

  • 企業売却後もユーザーデータは保護される

Hacker Newsでの議論の中で、あるユーザーが、Stripeの現在の善意にもかかわらず、他社がStripeを買収した場合にユーザーデータが悪意ある者の手に渡る可能性を懸念した。パトリック・コリソンは次のように返答した。

法務チームに、清算などの事態においてこのデータを共有しないよう契約上自らを拘束したり、何らかの有用な形で自らを縛ることができないか確認してみます……

おそらくそのやり取りに直接応える形で、新しいプライバシーポリシーには次の条項が含まれている。

当社または当社事業の一部を買収した他のいかなる事業体も、お客様の個人データを引き続き使用する権利を有しますが、別途お客様が同意しない限り、本プライバシーポリシーに定められた方法でのみ使用されます。

今後期待する改善点

Stripeの迅速かつ徹底した対応には感心したが、まだ改善が必要だと感じる点も残っている。これらの懸念はStripeに直接伝えており、彼らは将来的に対応する予定があると述べている。

URL収集についてより明示的な開示を

Stripeの不正検出専用ページには、不正検出の一環としてエンドユーザーからどのような情報を収集するかを説明する「シグナルの種類」というセクションがある。

私のブログ記事では、Stripeがユーザーが訪問したすべてのページの完全なURLを、クエリ文字列(例:example.com?userId=michael)やURLフラグメント(例:example.com#key=1234)を含めて収集していたことを指摘した。Stripeは依然としてこの情報を収集していることを明確にしていない。最も近い記述は次のセクションだ(強調は筆者による)。

高度な不正検出シグナルには、正規の購入者と不正な購入者やボットを区別するのに役立つ、ショッピング体験における行動指標も含まれます……これらのシグナルには、マウスの動きの指標や、ショッピング体験においてユーザーが各ページに滞在した時間が含まれ、いずれもセッション全体を通じたボット的な行動の予測に役立ちます。

この文言から、Stripeが完全なURLを収集していると合理的に推測できるだろうか。私はそうは思わない。

機密データをクエリ文字列に保存するウェブアプリケーションには同情の余地がないと感じるかもしれない。なぜなら、それは安全でないパターンとして広く認識されているからだ。より深刻なのはURLフラグメントだ。こちらは本来、機密情報を保存する安全な方法であり、サードパーティのライブラリがそのコピーを外部サーバーに送信しているのは憂慮すべきことだ。

Firefox SendMega.nzは、URLフラグメントを使ってクライアント側の暗号化キーを保存している人気のウェブアプリの例であり、ユーザーはサーバーが元データに一切アクセスできない形で、エンドツーエンドで暗号化されたファイルをクラウドに保存できる。もしStripeのJSライブラリが同様の仕組みを採用しているサイトで動作すれば、そのライブラリは機密性の高い暗号化キーをStripeのサーバーに漏洩させることになる。

URLフラグメントに暗号化キーを表示しているMega.nzのスクリーンショット

人気のファイル共有アプリMega.nzは、機密性の高い暗号化キーをURLフラグメント欄に保存している

ライブラリのアンロードへの対応

loadStripe関数や/pureインポートパスによって、導入者はStripeをいつ有効にするかを決められるようになったが、Stripeを無効にする方法は依然としてない。

たとえば、チェックアウトフローではStripeの高度な不正検出を有効にしつつ、取引が完了したらStripeとのデータ共有を止めたいとする。現状、それを実現する唯一の方法はページを強制的に再読み込みすることだ。

アプリが必要としなくなった時点でトラッキングを動的に無効化できる、unloadStripeのようなシンプルな関数をStripeが提供すれば、より良いだろう。

なぜこれが重要なのか

サードパーティのJavaScriptパッケージを組み込むことで、ウェブサイトの所有者はそのライブラリに大きな信頼を寄せることになる。ユーザーのブラウザでコードを実行できるJavaScriptライブラリは、まさに王国の鍵を握っている。ユーザーが見られるすべての情報にアクセスでき、ユーザーの権限でサイト上で操作を実行できるのだ。

ウェブサイトの所有者には、自サイトが直接またはサードパーティのライブラリを通じてどのような情報を収集しているかを把握する責任がある(法域によっては法的責任でもある)。Stripeが責任あるデータ管理を示していることは喜ばしいが、ウェブサイトの所有者は、外部パートナーがどのようなデータを収集し、そのデータについてどのような制限を保証するのかを理解する権利を主張し続けなければならない。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント