[程式開發日記] 如何設計出嚴格的資料驗證流程關卡

資料驗證一直以來都是最重要的功能
可是在實作上
一個動作要經歷很多驗證關卡
才能大幅降低被駭客入侵的機率

所以本篇文章會以我的開發經驗來敘說
在撰寫資料驗證關卡時要注意哪些事項

【先看個驗證範例】

假設說今天有一個論壇網站
有個會員要發表話題
那資料的驗證關卡大概會是這樣

  1.  登入驗證
  2.  會員是否被停權
  3.  檢查前端傳入的資料是否在預期範圍(包含過濾)
  4.  依照傳入資料,檢查討論版是否存在
  5.  依照傳入資料,檢查話題分類是否存在
  6.  檢查此會員是否有權限在此版發文
  7.  檢查話題內容是否有不雅用詞
  8.  驗證成功,寫入資料庫

從上面關卡流程可以歸納出幾個重點
"帳號驗證"、"資料傳入驗證"、"相關資料驗證"、"權限驗證"

這些只是一小部分而已
實際上會依照專案功能複雜度決定有多少驗證關卡

假設有一個驗證關卡你沒有考慮到
就有可能會引發下列情況

  1.  無登入發表話題
  2.  傳入惡意資料
  3.  話題不屬於任何一個討論版
  4.  任何會員都可以在任何討論版進行發文

所以這就是為什麼資料關卡要很嚴謹的原因

【使用關聯式方法找出需要驗證的項目】

當你在開發專案時
會有很多程式功能互相使用
以網站來說
可以從功能動作開始深入尋找

「假設有個會員想要回覆話題」

從回覆話題一詞來看
反推後可以得知
這個回覆功能會牽涉到幾個重點功能

  1.  帳號
  2.  討論版
  3.  話題

所以再細分每個功能都包含了什麼子功能/資料
這部分也與設計資料表/功能有關係

[ 帳號 ]
1. 帳號等級
2. 帳號權限
3. 帳號是否被停權

[ 討論版 ]
1. 討論版資料
2. 討論版權限
3. 討論版分類
4. 討論版是否隱藏

[ 話題 ]
1. 話題資料
2. 話題發文帳號
3. 話題是否能回覆

除了上面功能之外
也要包含通用驗證"??資料是否存在"

最後可以歸納出這些驗證關卡

  1. 登入驗證
  2. 帳號是否被停權
  3. 檢查前端傳入的資料是否在預期範圍(包含過濾)
  4. 檢查討論版是否存在
  5. 檢查此會員是否有權限在此版回覆
  6. 檢查話題是否存在
  7. 檢查話題是否能回覆
  8. 檢查話題內容是否有不雅用詞
  9. 驗證成功,寫入資料庫

當然
這些驗證關卡僅僅只是一小部分

【結尾】

從功能動作>>重點功能關聯分析>>細項功能關聯分析>>驗證關卡歸納
這些流程都是透過累積實作經驗來的

透過關聯式思考
去判斷是否有未考慮到的驗證關卡
才能降低被入侵機率

留言