程式設計師都應該瞭解哪些安全知識

黃利民發表於2013-03-20

導讀:本文來自StackOverflow上的一個問答貼。網友 M.H 提問: 我是一名IT專業學生,現在是大三,直到現在我們才開始學習很多計算機相關的課程(程式設計、演算法、計算機體系結構、數學等……)。

但是還有一個叫“安全”的世界離我們很遠,我是指:電腦保安、網際網路安全、網路安全、Hacking、破解等。 

我很確信沒有人可以知曉所有安全知識,但我確信,肯定有一定的“最低限度”知識,是每個程式設計師或IT學生應當瞭解的。我的問題是,那些“最低限度”知識包括了哪些?希望您能給我建議一些電子書,或課程,或任何有助於我探索這條路的東西。

 

目前這個問題得分最高的回覆是由 bignum 提供的,如下:

 

如果想要你的程式是安全的,請記住如下原則:

● 不要信任使用者的輸入資訊!

● 驗證所有來自非信任源的輸入資訊,是使用白名單,不是黑名單。

● 從一開始就要策劃安全。安全並不是可以在最後來做的。

● 保持簡單。複雜性會增加安全漏洞的可能性。

● 最低限度保持你程式的攻擊面(attack surface)。

● 確保程式有“自動防故障裝置”(Fail-safe

● 採用深度防禦(defence in depth

● 堅持最小特權原則(least privilege

● 採用威脅建模(threat modelling(Web程式更應如此)

● 許可權分離(Compartmentalize

● 沒有不透風的牆,在程式碼中隱藏祕密都無法長久。

● Don’t write your own crypto / 不要自己編寫一種加密方法 (譯註:見下文另外一位網友的回覆)

● 採用加密(crypto),並不意味著你就安全了(攻擊者會尋找弱點)

● 注意緩衝區溢位,並瞭解如何防範

 

下面是一些優秀書籍和線上文章:

●《 Writng Secure Code  | 編寫安全的程式碼 (第二版)》- 我認為每個程式設計師都該讀讀這本書 (譯註:第二版還沒有中文,據說在翻譯中……)

Writing Secure Code, Second Edition

● Building Secure Software: How to Avoid Security Problems the Right Way | 構建安全的軟體:避免產生軟體安全問題的正確方法

Building Secure Software: How to Avoid Security Problems the Right Way

 Secure Programming for Linux and Unix HOWTO (譯註:線上電子書)

 

Tyler McHenry 也給出了他認為程式設計師做安全的第一原則:Don’t roll your own。除非你是安全專家或密碼破譯專家,否則就採用現有的成熟安全平臺、框架、或庫。這些東西都經過了專家和黑客們深思熟慮、修補、更新和檢測。你得利用這些優勢,而不是忽視,試圖推到重來。

 

英文原文:StackOverflow    編譯:伯樂線上 – 黃利民

【如需轉載,請標註並保留原文連結、譯文連結和譯者等資訊,謝謝合作!】

 

相關文章