[程式開發日記] 如何設計出嚴格的資料驗證流程關卡
資料驗證一直以來都是最重要的功能
可是在實作上
一個動作要經歷很多驗證關卡
才能大幅降低被駭客入侵的機率
所以本篇文章會以我的開發經驗來敘說
在撰寫資料驗證關卡時要注意哪些事項
【先看個驗證範例】
假設說今天有一個論壇網站
有個會員要發表話題
那資料的驗證關卡大概會是這樣
- 登入驗證
- 會員是否被停權
- 檢查前端傳入的資料是否在預期範圍(包含過濾)
- 依照傳入資料,檢查討論版是否存在
- 依照傳入資料,檢查話題分類是否存在
- 檢查此會員是否有權限在此版發文
- 檢查話題內容是否有不雅用詞
- 驗證成功,寫入資料庫
從上面關卡流程可以歸納出幾個重點
"帳號驗證"、"資料傳入驗證"、"相關資料驗證"、"權限驗證"
這些只是一小部分而已
實際上會依照專案功能複雜度決定有多少驗證關卡
假設有一個驗證關卡你沒有考慮到
就有可能會引發下列情況
- 無登入發表話題
- 傳入惡意資料
- 話題不屬於任何一個討論版
- 任何會員都可以在任何討論版進行發文
所以這就是為什麼資料關卡要很嚴謹的原因
【使用關聯式方法找出需要驗證的項目】
當你在開發專案時
會有很多程式功能互相使用
以網站來說
可以從功能動作開始深入尋找
「假設有個會員想要回覆話題」
從回覆話題一詞來看
反推後可以得知
這個回覆功能會牽涉到幾個重點功能
- 帳號
- 討論版
- 話題
所以再細分每個功能都包含了什麼子功能/資料
這部分也與設計資料表/功能有關係
[ 帳號 ]
1. 帳號等級
2. 帳號權限
3. 帳號是否被停權
[ 討論版 ]
1. 討論版資料
2. 討論版權限
3. 討論版分類
4. 討論版是否隱藏
[ 話題 ]
1. 話題資料
2. 話題發文帳號
3. 話題是否能回覆
除了上面功能之外
也要包含通用驗證"??資料是否存在"
最後可以歸納出這些驗證關卡
- 登入驗證
- 帳號是否被停權
- 檢查前端傳入的資料是否在預期範圍(包含過濾)
- 檢查討論版是否存在
- 檢查此會員是否有權限在此版回覆
- 檢查話題是否存在
- 檢查話題是否能回覆
- 檢查話題內容是否有不雅用詞
- 驗證成功,寫入資料庫
當然
這些驗證關卡僅僅只是一小部分
【結尾】
從功能動作>>重點功能關聯分析>>細項功能關聯分析>>驗證關卡歸納
這些流程都是透過累積實作經驗來的
透過關聯式思考
去判斷是否有未考慮到的驗證關卡
才能降低被入侵機率
留言