我在linkedin上看到乙個帖子,有人問幾個靜態分析安全廠商的區別。有乙個人不出所料地回答說,他們的解決方案比較好,因為當其他公司注重質量和安全時,他們在嚴格地執行安全。
當然,這句話很可笑。而這種想法也許正說明了目前業界應用安全問題的猖獗;例如,那些試圖將安全小組與sdlc的其他部分(包括開發和測試工作)完全分開執行的組織。在這種模式下,安全小組執行自己的測試,主要是試圖破壞軟體,然後將安全錯誤反饋給開發團隊。換句話說,試圖在他們的**中測試安全。我可以向你保證,這並不比在你的**中測試質量更有效。
當然,這種安全測試是必要的,但這根本不夠。雖然破壞軟體確實很有用,但依靠它作為提高安全性的方法,會導致在發現錯誤的時候為時已晚,最終被壓制。特別是,諸如不恰當的框架和演算法等根源問題被掃地出門,因為時間表贏得了重寫**和將版本發布出去之間的衝突。
「研究人員的共識是,至少有一半,甚至可能多達70%的常見軟體漏洞是根本性的**質量問題,可以通過編寫更好的軟體來預防。馬虎的編碼。」如果你還不確定質量和安全是如何重疊的,請看一下cwe top 25中的幾個例子。以下可能的安全結果來自cwe技術影響工作。——jim bird在「構建真正的軟體」中說到
如果你進一步去看完整的cwe列表(超過800個專案),你會發現很多其他的問題,即所有形式的溢位/下溢、初始化、不受控制的遞迴等。這些都是常見的安全攻擊,也是明顯的質量問題。
軟體系統的複雜性增長非常迅速。想要測試每乙個可能的變化很快就變得幾乎不可能。正如richard bender所說:「潛在測試的數量超過了宇宙中分子的數量。」這只是一種更有趣的說法,你永遠也做不到。或者jim bird說的:「對於乙個大系統,你需要無限多的筆測試人員在無限多的鍵盤上工作無限多的時間,也許才能找到所有的bug。」
所以安全性和可靠性都要設計和工程化進去。你不能把它們測試進去。只要安全性是「額外」的東西,它就會受到影響。
以下是你可以做的幾件事,可以同時開始提高你的軟體質量和安全性。
對開發人員進行安全開發方面的培訓。在安全開發實踐中對開發人員進行充分的培訓意味著他們可以預防(或至少發現並修復)安全問題。
設計和構建你的系統時要刻意關注質量和安全。避免那些「能用」但並不是乙個好的選擇的**,因為它有潛在的安全問題。靜態分析可以幫助你做到這一點,檢查你的**,不僅要檢查錯誤,還要檢查是否符合已知的最佳實踐。
停止依賴邊緣工具。認識你的實際暴露和攻擊面。防火牆和反病毒無法彌補不安全的**——你必須加固你的應用程式。
收集/測量缺陷資料,並使用它來評估和改進你的開發實踐。哪些**或元件產生的問題最多?哪些**是最好的?它們是如何測試的?重複好的想法,棄掉壞的想法。
使用嚴格的靜態分析。不要簡單地接受別人的評估,認為報告的缺陷不是乙個重要的問題或假陽性。獲取一套包括檢測和預防在內的好規則,並按其生活。最好的方法是從圍繞最佳實踐的工程方法(cwe、cert和owasp等編碼標準的作用)。靜態分析是確保最佳實踐被遵循的方法。
使用執行時分析。它會發現真正的問題(尤其是討厭的記憶體問題),它能準確地告訴你**出了問題,出了什麼問題,而不會出現任何誤報。
因此,我們需要開始在**中構建安全性。這是真正加固的最好方法,而不僅僅是修補已知的漏洞。將編碼、構建和測試的所有軟體開發結果整合到乙個**儲存庫中,可以提供控制、測量和可追溯性。這是未來改進的基礎。
而且請記住,堅實的預防的成本比處理壞的或不安全的軟體的成本要低。所以,真的沒有任何藉口對軟體測試視而不見了。
軟體測試和軟體質量
來自wikipedia 描述一種用來促進鑑定軟體的正確性 完整性 安全性和質量的過程。換句話說,軟體測試是一種實際輸出與預期輸出間的審核或比較過程。軟體測試的經典定義 在規定的條件下對程式進行操作,以發現程式錯誤,衡量軟體質量,並對其是否滿足設計要求進行評估的過程。iso 9126 是乙個用來評估軟...
軟體質量 軟體測試和質量保證
軟體質量 軟體質量包括 內部質量 外部質量 使用質量 就是說軟體滿足規定或潛在使用者需求的能力,要從軟體在內部 外部和使用中的表現來衡量 軟體測試 軟體由文件 資料以及程式組成,那麼軟體測試就應該是對軟體形成過程中的文件 資料以及程式進行測試,而不僅僅是對程式進行的測試。軟體測試和質量保證的區別 軟...
10個技巧幫你搞定IE 6
但對於整個網際網路,ie6仍然是使用者最多的瀏覽器。暫不說ie6怎樣,把web的表現做得更好,既是一種責任,也是一種能力的表現。如果你依然對ie6所出現的種種問題無可奈何,就讓我帶你來看一下來自sitepoint的 10 fixes that solve ie6 problems,學會這10個方法,...