程式設計師需要謹記的九大安全編碼規則

Web開發者發表於2012-08-12

  歷史已經證明,軟體設計的缺陷一直是導致其漏洞被利用的最主要的罪魁禍首。安全專家發現,多數漏洞源自常見軟體中相對有限的一些漏洞。軟體開發者和設計者應當嚴格檢查程式中的各種錯誤,儘量在軟體部署之前就減少或清除其中的漏洞。

  下面列舉的這些方法會有助於開發人員提高編碼的安全性:

一、注意編譯器警告

  程式設計師應當使用編譯器的最高警告等級。在編譯過程中,應當修改程式中的錯誤,直到警告解除。應當使用靜態和動態的分析工具來檢測和清除安全缺陷。

二、根據安全策略設定軟體架構

  設計者應建立一個軟體架構,並在設計軟體的過程中實施和強化安全策略。例如,如果你的系統在不同的時間要求不同的特權,就不妨考慮將系統分解成能夠互聯通訊的不同的子系統,每一個系統都有自己適當的特權。這種“分而治之”的方法可以有效地提高應用程式的安全性。

三、驗證輸入

  程式設計者在設計程式時必須驗證來自所有不可信資料來源的輸入。適當的輸入驗證可以清除多數軟體漏洞。在設計程式時,必須對多數外部的資料來源抱著懷疑的態度,其中包括命令列引數、網路介面、環境變數、使用者控制的檔案等。

四、保持程式簡單

  設計者要儘量使程式短小精悍。 複雜的設計會增加實施、配置、使用過程中出現錯誤的可能性。程式越複雜,就需要越多的複雜的安全控制,企業需要付出的努力也就會越多。

五、拒絕預設訪問

  訪問決策的制定應當根據許可許可權而不是根據其它的任何方面。這意味著,預設情況下,應當拒絕訪問,程式的保護機制應當根據“允許誰訪問”來確認訪問條件。

六、遵循最小特權原則

  程式的每個處理過程在執行時,都應當僅使用為完成其工作而需要的最小特權。任何提升的許可許可權都要儘量持續最短的時間。這種方法可以減少攻擊者用提升的特權執行任意程式碼的可能性。

七、“淨化”傳送給其它系統的資料

  所謂“淨化” 是指從使用者輸入的資料中清除惡意資料,如清除使用者提交表單時的惡意的或錯誤的字元。

  程式設計者必須對傳送到複雜的子系統(如命令外殼、關係型資料庫、購買的商業軟體元件)的所有資料進行“淨化”。攻擊者有可能通過使用 SQL 注入命令或其它注入攻擊來呼叫這些元件中沒有被使用的功能。這未必是輸入驗證問題,因為被呼叫的複雜的子系統並不理解呼叫過程中的前後關係。由於呼叫程式 理解前後關係,所以我們要在呼叫子系統之前對資料進行“淨化”。

八、實施深度防禦

  程式設計必須能夠利用多種防禦策略來管理風險。只有這樣,才能在一層防禦不夠用或失效時,另外一層防禦可以防止將安全設計上的缺陷變成可被利用的漏洞,從而可以限制攻擊者利用漏洞的後果。例如,將安全程式設計技術與安全執行環境結合起來,可以減少在部署階段殘存在程式碼中的漏洞被攻擊者在操作環境中利用的可能性。

九、使用有效的質量保證技術

  良好的質量保證技術可以有效地確認和清除漏洞。模糊測試、滲透測試、原始碼審計等都可以結合起來使用,以此作為一個有效的質量保證專案的一部 分。獨立的安全檢查可以使系統更安全。有資質的外部審查人員可以提供獨立的觀點,例如,外部人員有助於確認和糾正一些錯誤的設想。

  當然,為保證程式碼的安全,企業應當為開發語言和平臺制定並實施一套健全的編碼標準。

相關文章