手機應用串第三方金流,是否該以伺服器代發 post request?


#1

大家好,

最近要開發一個 api server 和手機互動,其中會提供購買實體商品的服務,平台規範不能用內購,所以會串第三方金流。目前實作的想法如下,怕有明顯缺點,還請多多指教~

為了達到不跳離手機 app 目的(點選付款連結後打開 browser),所以打算在手機端自製表單,然後把金流資訊 post 到公司伺服器,再由公司伺服器代填,post 到第三方金流。之後訊息再逆推回公司伺服器以更新資料庫,讓手機查詢最新結果。

流程圖:手機 -> 公司伺服器 -> 第三方金流 -> 公司伺服器更新資料庫

請問這樣的做法好嗎?有沒有其他建議方式?

其實理想是:手機 -> 第三方金流 -> 公司伺服器更新資料庫

但手機端不知道做不做得到?能不能指定金流回傳訊息到公司伺服器?

也許以上兩種想法都不標準,還請各位分享、指教~


#2

『不可以,且絕對禁止』,否則請你們公司符合 PCI DSS 規定並接受專業單位檢查(我們是有找顧問來討論過了,連原始碼都會需要第三方單位檢視,甚至還需要很多台防禦主機之類的)

其實用類似 iframe / webview 就好了 … 不要自己想太多,因為那『必須』是別人家的流程,而不是你把核彈丟到自己家內(這是一個一但出事『你們家就會不見』的話題,且開始求償進行法律責任歸屬),尤其是金流系列的安全性,而交易完後 iframe / webview 再和你們主機檢查是否有 callback 或是讓使用者自己按確認來變更訂單的 status 即可

身為開發者請保障你自身安全,而非上位者的要求哩,至於其他的,你可以找有沒有第三方支付有手機版的 SDK 可以用,但請記住,不要改金流的流程,而是選你可以配合的公司,如果他們的金流流程符合你們可以用的,否則出事情你們需要負責的

這話題很類似 password 欄位是否需要加密,而怎樣加密,還是像現在通用的算 checksum 就好了,甚至加上 salt,且比這個嚴重 N 倍唄


#3

了解,絕對不會以公司伺服器代填,感謝 JC 大不吝分享!

所以建議做法是:找有提供手機端 SDK 第三方金流,直接讓我們的用戶在第三方介面填,而我們再依第三方那邊的確認訊息更新商品資料庫。

假若很不幸沒有找到,那麼寧可犧牲體驗,跳出 app 用 browser 提供第三方的介面給用戶填。對嗎?(會以這兩個方向來開發,絕對不用不安全的方式來串 orz)

另外純好奇,不能用之前的方式做,應該是手機到公司伺服器這段傳輸不安全?就算加密連線也不能防個資洩漏嗎?

當然也可能是公司資料庫被複製走,那麼假設代填完、且更新商品資料庫後,就把敏感資訊刪掉,行嗎?(比如只剩下A帳號在B時間買了C商品D個,其他一概不留)

再次強調,絕對不會用之前的方式做,只是想挖看看更深的知識而已~非常感謝 JC 大拉一把避免掉坑~


#4

任何一段安全有問題都是問題,包括後門程式長期監聽之類的,所以不管你怎樣做都會漏 … 當你會漏一筆,就當作一萬筆來看待會好點,且估算這樣的"風險"是否自己能夠承受之類的?

手機到公司傳輸不安全這段應該是還好的,因為你可以用 RSA 雙 key 來做簽收發送,甚至每個手機都發一把來和 server 換 key (初次開啟 app 時),所以這段算簡單,而使用者開單通常都是 order 式,看是一對多還是一對一而已, DB 可以留 order,單純個資要加密和金流資訊不留(只留類似金流單位給編號,價錢之類的即可,方便對帳用)

大概就這樣唄,還有啥問題可以提出就是