信息安全性是一個經常被開發人員誤解的主題,因為絕大多數人關注的是安全技術層面,而非涉及人員、金錢、風險和業務優先級等更廣泛的主題。因而,我們經常看到因為決策失誤使得問題更為復雜,同時也造成資源浪費。
在構建和選擇安全解決方案的時候,開發人員必須為業務和組織架構挑選出最為準確的方案。對于初級開發人員而言,如何清楚地知道該在哪些范圍內做出安全決策,顯得尤其重要。
1. 避免教條主義和絕對主義
最近有一位投稿人在dev.to 文章中分享了關于JSON網頁令牌和本地緩存主題的建議,如下。
現如今我所能看到的最大的安全隱患是JWTs(session 數據)的本地緩存。然而許多人并未意識到這些JWTs數據本質上就等同于用戶名和密碼。如果JWT被黑客復制,他就可以以你的名義向網站發送各種請求,而你卻一無所知。要像對待信用卡賬號和密碼一樣來對待你的JWTs,絕不要將其存儲在本地。
提出這個建議的文章很好,并且涵蓋了很多關于JavaScript本地緩存的重要話題,確實值得一讀。但遺憾的是,這種關于JWTs和安全的描述具有誤導性,至少缺少開發者所需要理解的細微差別。
使用 JWT 本地存儲的立場絕對是:不要這樣做!你將JWT存儲在哪并不重要,存儲在某個'安全'的地方并不能保證安全。關鍵問題是,你在JWT中存放了什么信息,你用JWT做什么,去獲取什么?
如果你的回答不包含任何的個人可識別(標志)信息,或含有最少的個人可標志信息,這樣的話你就可以考慮使用JWT去做你想做的。如果關于以上問題的回答是:存儲他們所有的信用卡信息,那么你應該考慮用另外的技術來替代JWT。
比如,如果你要實現在線新聞出版物內容收費,本地存儲的JWTs將是一個完全可以接受的安全解決方案。你保護的內容是低價值的,沒有個人可標志信息,所以黑客對這些內容并不會感興趣。盡管普通Web用戶沒有付費時JWT會打斷(終止)其訪問內容 — 一個簡單的安全需求解決方案。
你會注意到這種解決安全問題的方法并不是那么教條和專制。有才華的開發者傾向于成為教條主義和專制主義者,可能是因為他們看到的所有東西都是“不好的”,或者至少不夠完美。這有點像當年柏拉圖在公元前5世紀看待雅典時期的態度,但像柏拉圖一樣,這種方法可能會導致解決不好的方案和糟糕的答案。對于試圖理解某個話題的人來說,這可能是無益的,特別是如果他們是新手的話。
在處理安全問題以避免教條、專制主義和一刀切等問題時,這是明智的。這與道德絕對“不要殺戮”相當,因為安全涉及更多的細微差別。
2. 沒有跟安全性一樣的事物
安全的核心有一個極大的諷刺,那就是它并不存在。最近Google Chrome在Twitter上宣布,他們將把所有使用HTTP的網站標記為“不安全”。他們已經在網址欄中將HTTPS網站標記為“安全”。
Twitter廣告信息及隱私
這很奇怪,因為HTTPS或通過TLS的HTTP是非常有用的安全增強功能,但不能保證其安全性。這是完全可能的:建立一個站點并通過HTTP提供服務,可提供比通過HTTPS服務的站點更安全的方式。
Google此舉非常不負責任,因為他們會使普通網絡用戶處于危險而不自知,以至于對線上行為放松警惕。而這還未涉及HTTPS 連接是如何實現的,請參見靈活的SSLCloudFlare。將這類連接定義成“安全”或者“不安全”會產生誤導,更為明智的做法是定義為“私人的”或“公共的”。
絕對的安全并不存在,就算是采用最先進的技術也不能保證。安全性是相對被保護的對象而言的。幾千年來,人類建造了各種各樣的圍墻來保證安全,但皆非固若金湯。
如果不信,那就找個伊朗人問問。憑借以色列人的幫助,美國在2009年入侵了伊朗名為 Natanz 核設施,其中或許還有英國人的幫助。或許你還記得當時Stuxnet 病毒 ,它可是這起事件的罪魁禍首。那次黑客的特別之處在于,Natanz 核設施采用的是空氣隙技術,它可能是世界上最安全的設施之一,但也沒能阻止美國人將病毒帶入該設施從而擾亂伊朗的核計劃。
如果你對這個話題以及類似這樣的故事感興趣,我建議你閱讀Gordon Corera的書Intercept: The Secret History of Computers and Spies(截取:計算機和間諜秘史)。這是一本很棒的書,將為你介紹安全和黑客之類的話題。
良好的安全性需要構建一個高于你所保護的資產價值的墻。也就是黑客攻擊你的系統的代價會比黑客竊取它之后的價值更高。這也意味著你的安全性應該與你所保護的內容相符。例如,不要在服務器上使用網閘(air gap)來保護從網絡注冊表中收集到的一些電子郵件地址,否則這將非常浪費金錢。
3. 了解潛在的威脅
在建造你的防火墻時,了解你所面臨的威脅是很重要的。安全威脅可以分解為四個基本分組:
? Kiddy Scripters(初級腳本)和自動化威脅:參考大多數WordPress/Joomla hacks。
? 熟練的黑客和黑客組織:匿名,LulzSec
? 有組織犯罪和次要國家成員:黑手黨,北朝鮮
? 主要國家成員:美國,中國,俄羅斯,以色列,英國
大多數開發人員很少會處理高于第一級的任何事情。其原因有兩方面,你必須做一些重要的有財務價值和/或具有顯著的政治價值的事情才能超越這一級。這方面的例子包括敏感的政府工作、公司的財務方面以及重要協作意向。
同樣威脅是多樣化的,并不一定與黑客攻擊數據有關。例如,你的組織可能相比于數據泄露更容易遭受DDOS攻擊。作為一名開發人員,重要的是要考慮你的組織可能會如何受到影響,而主要漏洞可能并不總是以財務或PII為重點,這可能事關聲譽。通過讓你的網站離線以使你的組織遭遇尷尬,這可能會比竊取你的服務器上的PII更具價值。
2014年的Fappening事件是一個組織未能正確理解威脅的經典例子。在這種情況下,Apple未能正確估算他們在iCloud系統上的內容,因此并沒有實施可能限制其損害的安全功能。例如,當新設備或奇怪IP連接到帳戶時發送電子郵件。Fappening是一個邊緣案例,因為之前沒有人真正考慮過名人數據的價值,但它確實強調了組織在面臨的威脅時可能并不總是理智的。
4. 實現一個適當的解決方案
如果你在沒有正確考慮你所面臨的威脅的情況下實現通用安全解決方案,則你可能和不使用任何安全措施一樣安全不了多少。
作為開發人員,在實現任何安全解決方案之前,你必須認真考慮你所面臨的威脅。這樣可以實現一個相應的安全措施。適當性并不僅僅是與安全威脅有關,它還涉及到你需要花多少錢。一個貧窮的國家不能建造中國長城,但如果它理解了這個威脅并合理地部署它的資源,它就能夠防御之。
-
軟件開發
+關注
關注
0文章
612瀏覽量
27353 -
信息安全
+關注
關注
5文章
655瀏覽量
38895
原文標題:軟件開發人員應遵循的四項安全原則
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論