網站安全🔒 打好基本功!大師教你 10 大網站安全設計原則

Jayden Lin
程式猿吃香蕉
Published in
Jan 7, 2019

筆者任職 Yahoo ,《經典駭客攻擊教程:給每個人的網站安全入門》線上課程講師 ,粉絲團《程式猿吃香蕉🍌

image from http://gotocon.com

軟體安全從設計做起!著名講者 Eoin Woods 以他多年經驗,歸納10條安全設計原則。無論是專案經理或是工程師,這部影片都能讓你有所收穫。

以下是我彙整影片內容的摘要。

10 大安全設計原則指南

(1) 最小權限原則 ( Least privilege )

https://youtu.be/4qN3JBGd1g8?t=685

  • 相信大家都曾有過這樣的經驗,每個工程師都拿sudo權限,都有權限改系統設定,造成環境的混亂。
  • 應該要給大家盡量小的權限,讓大家能夠完成任務即可,不要拿過多的權限。

(2) 責任分離原則 (Separate responsibilities)

https://youtu.be/4qN3JBGd1g8?t=831

  • 不管是在商業邏輯層級或是系統層級,都應該做到責任分離。例如:付款模組跟訂單模組應該要分開,前端介面跟後端資料庫要分開,各司其職。
  • 這樣的原則跟出納跟會計要分開很像,責任分離避免安全性的疑慮。

(3) 不輕易相信 ( Trust cautiously )

https://youtu.be/4qN3JBGd1g8?t=1024

  • 任何未知的連接都應該視為不可被信任的。
  • 講者舉了一個Message Queue的案例,說明不應該輕易相信每一個連線。

(4) 盡可能地採用簡單的做法 ( Simplest solution possible )

https://youtu.be/4qN3JBGd1g8?t=1464

  • 若是安全設計太複雜,便很難被大家理解,而大家無法理解的話,就會很難正確執行。

(5) 記錄敏感的事件 ( Audit sensitive events )

https://youtu.be/4qN3JBGd1g8?t=1678

  • 至少當系統出事的時候,可以知道發生了什麼事情。
  • 這些 Log 需要放在更安全的地方,權限也要做另外的控管。

(6) 安全地使用預設值 ( Secure defaults )

https://youtu.be/4qN3JBGd1g8?t=1813

  • 大部分的人都不會更改預設的帳號密碼,當系統安裝完後,就使用預設的帳密做事,這樣是很危險的。
  • 你們家裡的買的wifi分享器,密碼都改了嗎 ?

(7) 不要依賴「混淆」 ( Never rely on obscurity )

https://youtu.be/4qN3JBGd1g8?t=1950

  • 「混淆」機制有很多種,例如:更換 port 號, 混淆程式碼等等。
  • 不要過度依賴這些方式來防禦,因為既然是人做的混淆,總有可能被暴力猜中。

(8) 深層的防禦 ( Defense in depth )

https://youtu.be/4qN3JBGd1g8?t=2196

  • 就像古代的城堡有很多層防禦,系統的防禦也應該從 UI, API, Database 都作防禦。
  • 避免被駭客單點突破後,整個系統就被予取予求。

(9) 不要發明自行安全機制 ( Never invent security tech )

https://youtu.be/4qN3JBGd1g8?t=2372

  • 自行發明東西很酷!但是不要用在自己發明安全機制,例如:不要自己發明加密演算法,因為你設計的東西很難一次就完美。

(10) 找尋脆弱的環節 ( Secure the weakest link )

https://youtu.be/4qN3JBGd1g8?t=2463

  • 應該主動地去找尋系統的弱點,然後改進它。
  • 缺點是會花費很多時間和成本。

--

--

Jayden Lin
程式猿吃香蕉

曾在 Yahoo 擔任 Lead Engineer,負責廣告系統,帶團隊做跨國開發,現任職區塊鏈產業。也是《程式猿吃香蕉》團隊創辦人,喜歡將實用的軟體知識以簡單生動的方式講給大家聽 😄😄😄