http://mainichi.jp/select/news/20130604k0000e040185000c.html
このニュース見て多数の人が見てどう思ったのかはわからないのだが、私は率直に言って、
このシステム作った人アホだなと思った。iphoneアプリで絶対に想定しておかなければならない
ことを想定して実装していなかったというレベルのことだぞ。
家で例えるなら、鍵のない家を作りましたとか、全面ガラス張りの家を作りましたとかそういうレベル。
わかりやすく書ける自信がないが、正しい決済フローをちょっと解説してみるか。
まず登場人物は3人。
・アップルの決済サーバー:パスワード入れて決済をするあの画面を担当
・iphone端末:ユーザーが操作をしている端末
・紀伊國屋書店サーバー:電子書籍コンテンツを付与するサーバー
アップルの決済サーバーで決済をして紀伊國屋書店サーバーが電子書籍コンテンツを付与する
までの正しい流れはこんな感じ。
iphone端末
↓1.電子書籍コンテンツを買うボタンを押す
↓2.パスワードを入れて決済を完了
アップルの決済サーバー
↓3.決済完了の証拠として電子レシートを付与
iphone端末
↓4.アップルの決済サーバーから付与された電子レシートを紀伊國屋書店サーバーに送信
紀伊國屋書店サーバー
↓5.アップルの決済サーバーに電子レシートが本物かどうかを確認
アップルの決済サーバー
↓6.紀伊國屋書店サーバーに電子レシートの真贋結果を送信
紀伊國屋書店サーバー
↓7.ユーザーに電子書籍コンテンツを付与
iphone端末
お分かりいただけただろうか。ここで重要なのは、支払い完了をしたという証拠として使われる
「電子レシート」なるものだ。これ、アップル(のサーバー)から一旦ユーザーの端末に送られた後、
端末から紀伊國屋書店(のサーバー)にそのレシートが送られる流れになっているわけ。
だからちょっとよこしまなことを考える人はレシートを偽造して紀伊國屋書店サーバーに送信する
ことを「当然!」考えるでしょ。
だからユーザーから来るデータなんて当然信用しちゃだめで、上記フローの5のアップルサーバー
にレシートが本物かどうかを確認する処理を入れるのは絶対なの!必須なの!
こんな偽の決済通知が通る時点で5のフローの実装をしていないということを自ら言っているわけで、
鍵なしの家を作って泥棒に入られたから泥棒を逮捕しましたとか、そりゃ泥棒は悪いさ。
でも鍵なしの家を作るなんて「そんなの絶対おかしいよ!」って思うでしょ。
もう、こんないい加減なシステムを作ったどこぞのシステム会社に対して気分はこんな感じ。