フィンテックを支える複雑なシステム間連携、絶対条件は「データの整合性を保つこと」
三谷氏が所属するスマートバンクのサービス「ワンバンク」は、単なる支出管理アプリにとどまらず、Visaのプリペイドカード機能がセットになっている点に大きな特徴がある。ユーザーがアプリに入金すれば、コンビニエンスストアやオンラインショッピングなど、Visa加盟店であればどこでも決済が可能だ。
この利便性の裏側には、高度で複雑なシステム間連携が存在する。入金処理や決済処理において、システムは外部の金融機関や決済ゲートウェイと絶えず通信を行っており、データの整合性を保つことが絶対条件となる。
フィンテックという最もデータの正確性が問われるこのドメインにおいて、スマートバンクがどのように2重リクエストの脅威と向き合い、堅牢なシステムアーキテクチャを構築してきたのか。本講演で三谷氏は、2重リクエスト問題の根本原因から、具体的な9つの技術的解決策までを深く掘り下げた。
フロントエンドの制御だけでは、2重リクエストは完全に対策できない
2重リクエストへの対策を講じるにあたり、三谷氏には「フロントエンドの制御だけでは、システムを完全に防御することは不可能である」という仮説があった。
一般的に、2重リクエストと聞くと、ユーザーが決済完了画面で誤ってブラウザの更新ボタンを押してしまったり、処理が遅いことに痺れを切らして送信ボタンを連打してしまったりといった、ユーザー起因のヒューマンエラーを想像しやすい。しかし、実際のシステム運用において直面する現実はそれほど単純ではなかった。
2重リクエストの想定ケースは多岐にわたる
スマートフォンアプリや多様なブラウザ環境からのアクセスはもちろんのこと、悪意を持った第三者がブラウザの開発者ツールなどを利用して意図的にリクエストを連続送信するケースも想定される。さらに厄介なのは、人間が介在しないシステム間の通信だ。
決済代行会社からのWebhook(外部システムでのイベント発生をHTTP経由で通知する仕組み)の再送や、定期実行されるバッチ処理の重複起動など、バックエンド側や外部環境に起因する2重リクエストも頻繁に発生する。これらすべての発生源をクライアント側の改修のみで塞ぐことは現実的ではなく、バックエンドの基盤レベルでデータを守り抜く仕組みが不可欠であるという強い認識が、スマートバンクの取り組みの出発点となった。
三谷氏はこの問題の深刻さについて、単なるバグ対応の枠を超えたリスク管理の観点から次のように語る。「ユーザーが間違えたときのこのような問題を放置しておくと、不正攻撃を受けるセキュリティホールにもなりかねず、この対策は非常に重要でした」。
この言葉が示す通り、2重リクエストの放置はシステムの脆弱性に直結する。特に金銭を取り扱うサービスにおいては、不完全な状態管理を突いて不正に利益を得ようとする攻撃の標的になりやすい。競合他社がひしめくフィンテック市場において、サービスの可用性とセキュリティを両立させることは自社の最大の競争力にもなる。そのため、データベースのテーブル設計から外部APIの呼び出しフローに至るまで、あらゆる層でデータの不整合を検知・遮断する「多層防御」の思想に基づく仮説が立てられ、具体的な対策の実行へと移されていった。
