April 25, 2016

Server API Security

App端開發到一個程度,最終還是得開始碰Server的部份。雖然紅極一時的Parse.com已經快要關店,但Opensource化後,可以自架Parse也是另外一種選擇。爬文查找用法之際,找到一系列關於資料安全性的設定與調控方式,可能在Server界已是慣例,但對初入門的我來說,可幫助我一探其中奧妙!

系列文章可從這裡開始參考:Parse Security I - Are you the Key Master?

以下節錄摘要給大家參考:

Part I,關於Master Key與各個Client Key的使用方式。
Master Key是一種security mechanism。擁有Master Key的人可以bypass後面提到的各種安全機制,對資料庫進行存取修改的動作。是故,需以保護Root Password的同樣程度來保護Master Key。
然而,Client Key則是一種辨別目前Client平台的方式。可能是iOS或Android終端,或者JavaScript或REST Client。這ClientKey會隨著app或source code進到user手中,便無法防止user反組譯或者用監聽網路傳輸的方式竊取ClientKey。所以,請不要把Client Key當成任何安全機制使用。

Part II,Class-level的權限設定。
在Parse後台上,可針對各別Class設定各種權限。可分別針對以下幾個API設定Public或Private(User/Role) 的read/write權限。
  • Get
  • Find
  • Update
  • Create
  • Delete
  • Add Field
其中比較特別的是AddField。該權限允許Client動態為table增加欄位。這功能在開發階段非常方便,但一旦App正式上架後則不應該經常發生。故上架後應將此權限關閉。
另外還有一個允許Client增加Class的全域權限,也應該在上架前關閉。

Part III - Access Control List
ACL允許為各別object設定不同的存取權限。此時帶入User的概念進來。若存有使用者的個人隱私資料,則應該使用ACL控制,不可允許任何人檢視。若為User Class,Parse預設不允許除了User本人以外的其他人修改,但可以查看內容。如有隱私資料如電話或email,則應另外設計PrivateData class存放,並設為其他User不可查看的權限。原文有相關範例程式碼,可以參考。

Part IV - Cloud Code
Parse允許上傳Javascript的Server side code。由Parse server執行。因若安全性檢查設在Client端則容易被bypass,失去保護作用,建議使用Cloud Code進行驗證資料內容等安全性檢查。
在Cloud Code中也可設定使用 `useMasterKey` 以略過security相關檢查。

Part V - 綜合運用以上功能,設計與朋友共享特定資料的範例。
本篇中解析了如何運用Role、ACL與Cloud Code,設定user的某些特定資料,可以與一群朋友分享。如有需要的朋友可以前往研究