我們今天,要把另外五項安全設計原則介紹完。
當我們在設計系統時,是否小心翼翼地分析每一個輸入的資料怎麼流進來,每一個輸出的資料怎麼傳出去呢?此原則便是在說,當外界發送任何請求時,必須完完整整地檢查過每一個請求,才能讓它流進來,存取系統內的資源。
我們在設計系統時,是使用只有我們自己才知道的架構進行設計,還是透過與其他人討論、審視,而獲得的設計概念呢?開放性設計原則並非說在設計時,不可以有隱藏的細節,而是適度地隱藏安全防護機制,並開放討論、批判架構設計的概念。好使這系統可以經得起來自各方攻擊者的考驗。
系統裡,難免會有使用者的資料,或者程式所儲存的資料。這個原則便是要最小化使用者或程式彼此間的共享資料或共用機制。
先前,國外的研究指出,讓使用者太頻繁更換密碼,反而使他們取更簡單的密碼,增加安全風險。因為對使用者而言,你的安全機制是否讓他窒礙難行?若讓使用者感受與接受度太差,使用者最後一定會千方百計繞過這些安全控制措施。
若你的系統需要一個嚴謹的登入與安全管控機制,你會採用 SpringFramework 與 Spring Security 框架嗎?還是自己開發呢?通常現成元件,常是經過多方審視,外界檢驗過的。雖然難免會碰上 0 day 攻擊,但總比自己開發的更加安全穩定。因此,系統開發時,盡可能地使用現成的元件,以減少攻擊面積與脆弱點。
直到今日,終於把基本的一些概念性說明完成。明日開始,我們基於 CIA、AAA 的原則,與這十項安全設計原則,加上 Java 安全開發指南,開始進入程式碼實作內容。