ご購入手続きに使うページの開発や保守を行っている方なら、PCI DSS v4 をご存知かもしれません。この 6.4.3 項で、次の要件が規定されています。
消費者のブラウザに読み込まれ、実行されるすべての決済ページ スクリプトは、次のように管理される。
この要件に準拠する方法の 1 つは、サブリソース完全性(SRI)のような手法を使うことです。ただし、SRI などの手法には長期にわたって安定したハッシュが必要ですが、Google Pay JavaScript(pay.js)のビルドとリリースのプロセスではそれを利用することはできません。
サンドボックス化した iframeを使うと、あらゆるコンプライアンス上の懸念を払拭できます。iframe 内のスクリプトは、親 DOM にアクセスできないからです。次の図の例をご覧ください。
<iframe
src="https://cdn.somewhereelse.com"
allow="payment"
sandbox="allow-scripts allow-popups allow-same-origin allow-forms">
</iframe>
この場合、ドメイン「cdn.somewhereelse.com」は Google Pay の pay.js JavaScript ファイルを読み込みます。トランザクションが成功すると、内部の iframe は必要に応じて親ページと通信できます。その際には、window.postMessage() などのメカニズムが使われます。
Google Pay をすべてのブラウザで動作させるには、allow=”payment”
に加えて、次の 4 つのサンドボックス属性値が必要です。
allow-scripts
iframe でスクリプトを実行できるようにする(pay.js など)。
allow-popups
埋め込みページが「子ブラウジング コンテキスト」を作成できるようにする。実際には、このフラグは、埋め込まれた iframe でユーザーがリンクをクリックしたときに、新しいタブとウィンドウを開けるようにする。
allow-same-origin
これが設定されていないと、ブラウザでさまざまな問題が発生する。設定されている場合、iframe が親のストレージや Cookie にアクセスできる。
allow-forms
Google Pay ログインなどのフォームでデータを送信できるようにする。
さまざまな iframe サンドボックス値の動作を確認するには、こちらのテストページをご覧ください。
Google Pay は、Shopify と連携して上記のソリューションを実装しました。Shopify は、サンドボックス化した iframe を使って Google Pay ボタンを表示することで、PCI DSS v4 の監査に合格しました。Shopify からのコメントを紹介します。
Shopify Checkout は、Google Pay のコードが安全なサンドボックス環境で実行されるように作られているので、ご購入手続きの整合性が維持され、PCI DSS v4 要件に準拠できます。
Shopify 特別エンジニア、Ilya Grigorik 氏
Shopify がサンドボックス化した iframe でご購入手続きソリューションを開発した詳しい方法については、Shopify のブログ投稿「PCI DSS v4 に準拠した Shopify の高パフォーマンスなご購入手続きを支えるサンドボックス化」をご覧ください。
サンドボックス化した iframe で Google Pay 連携機能をラップすることで、PCI DSS v4 要件に準拠できます。実装についてさらにサポートが必要な場合は、Google Pay & ウォレット コンソールにログインしてサポート チケットを作成してください。また、Discord の #payments チャンネルからデベロッパー コミュニティに参加することもできます。
X で@GooglePayDevs をフォローすると、今後の最新情報を受け取ることができます。ご不明な点がある場合は、@GooglePayDevs にタグ付けし、ツイートに #AskGooglePayDevs を含めてください。