程式設計師需要謹記的九大安全編碼規則
歷史已經證明,軟體設計的缺陷一直是導致其漏洞被利用的最主要的罪魁禍首。安全專家發現,多數漏洞源自常見軟體中相對有限的一些漏洞。軟體開發者和設計者應當嚴格檢查程式中的各種錯誤,儘量在軟體部署之前就減少或清除其中的漏洞。
下面列舉的這些方法會有助於開發人員提高編碼的安全性:
一、注意編譯器警告
程式設計師應當使用編譯器的最高警告等級。在編譯過程中,應當修改程式中的錯誤,直到警告解除。應當使用靜態和動態的分析工具來檢測和清除安全缺陷。
二、根據安全策略設定軟體架構
設計者應建立一個軟體架構,並在設計軟體的過程中實施和強化安全策略。例如,如果你的系統在不同的時間要求不同的特權,就不妨考慮將系統分解成能夠互聯通訊的不同的子系統,每一個系統都有自己適當的特權。這種“分而治之”的方法可以有效地提高應用程式的安全性。
三、驗證輸入
程式設計者在設計程式時必須驗證來自所有不可信資料來源的輸入。適當的輸入驗證可以清除多數軟體漏洞。在設計程式時,必須對多數外部的資料來源抱著懷疑的態度,其中包括命令列引數、網路介面、環境變數、使用者控制的檔案等。
四、保持程式簡單
設計者要儘量使程式短小精悍。 複雜的設計會增加實施、配置、使用過程中出現錯誤的可能性。程式越複雜,就需要越多的複雜的安全控制,企業需要付出的努力也就會越多。
五、拒絕預設訪問
訪問決策的制定應當根據許可許可權而不是根據其它的任何方面。這意味著,預設情況下,應當拒絕訪問,程式的保護機制應當根據“允許誰訪問”來確認訪問條件。
六、遵循最小特權原則
程式的每個處理過程在執行時,都應當僅使用為完成其工作而需要的最小特權。任何提升的許可許可權都要儘量持續最短的時間。這種方法可以減少攻擊者用提升的特權執行任意程式碼的可能性。
七、“淨化”傳送給其它系統的資料
所謂“淨化” 是指從使用者輸入的資料中清除惡意資料,如清除使用者提交表單時的惡意的或錯誤的字元。
程式設計者必須對傳送到複雜的子系統(如命令外殼、關係型資料庫、購買的商業軟體元件)的所有資料進行“淨化”。攻擊者有可能通過使用 SQL 注入命令或其它注入攻擊來呼叫這些元件中沒有被使用的功能。這未必是輸入驗證問題,因為被呼叫的複雜的子系統並不理解呼叫過程中的前後關係。由於呼叫程式 理解前後關係,所以我們要在呼叫子系統之前對資料進行“淨化”。
八、實施深度防禦
程式設計必須能夠利用多種防禦策略來管理風險。只有這樣,才能在一層防禦不夠用或失效時,另外一層防禦可以防止將安全設計上的缺陷變成可被利用的漏洞,從而可以限制攻擊者利用漏洞的後果。例如,將安全程式設計技術與安全執行環境結合起來,可以減少在部署階段殘存在程式碼中的漏洞被攻擊者在操作環境中利用的可能性。
九、使用有效的質量保證技術
良好的質量保證技術可以有效地確認和清除漏洞。模糊測試、滲透測試、原始碼審計等都可以結合起來使用,以此作為一個有效的質量保證專案的一部 分。獨立的安全檢查可以使系統更安全。有資質的外部審查人員可以提供獨立的觀點,例如,外部人員有助於確認和糾正一些錯誤的設想。
當然,為保證程式碼的安全,企業應當為開發語言和平臺制定並實施一套健全的編碼標準。
相關文章
- 初級程式設計師需要知道的基本程式碼規範程式設計師
- 程式設計師的你想跳槽了?謹記:哪裡都不好混!程式設計師
- 程式設計師筆記|如何編寫高效能的Java程式碼程式設計師筆記Java
- 上位機程式設計編碼規範程式設計
- Cursor,程式設計師的 AI 程式碼編輯助手程式設計師AI
- java安全編碼指南之:執行緒安全規則Java執行緒
- 計算機編碼規則之:Base64編碼計算機
- Protobuf編碼規則
- java安全編碼指南之:Thread API呼叫規則JavathreadAPI
- 程式設計師需要重新考慮無程式碼開發的原因。程式設計師
- "無程式碼"時代的到來,還需要程式設計師嗎?程式設計師
- 程式設計師筆記|如何編寫優雅的Dockerfile程式設計師筆記Docker
- Go程式設計的一些規則Go程式設計
- 物件導向的編碼設計原則物件
- HAP_編碼規則
- 給程式設計師的幾點程式設計經驗----《編寫高質量程式碼》程式設計師
- python 安全編碼&程式碼審計Python
- 程式設計小記-程式設計規範程式設計
- 你需要程式設計師鼓勵師嗎?程式設計師
- 程式設計師需要了解的硬核知識之記憶體程式設計師記憶體
- 程式設計師的職業規劃!程式設計師
- 前端程式設計師需要了解的MySQL前端程式設計師MySql
- Java程式設計師需要學習的技能Java程式設計師
- Java程式設計師都需要懂的「反射」Java程式設計師反射
- .Net WEB 程式設計師需要掌握的技能Web程式設計師
- 程式設計師常用的編輯器程式設計師
- 程式設計師程式設計入門一定知道!程式設計師需要學什麼?程式設計師
- Boost Note for Mac程式設計師程式碼記事本MacC程式程式設計師
- 前端設計與編碼規範前端
- Web前端安全之安全編碼原則Web前端
- 作為程式設計師,職業規劃需要注意的四個階段程式設計師
- @程式設計師,你需要點財商程式設計師
- 一個程式設計師的編年史程式設計師
- 1024程式設計師節,向用程式碼改變世界的程式設計師致敬!程式設計師
- 程式設計師為什麼喜歡在晚上編碼程式設計師
- 程式設計師or碼農程式設計師
- ESLint裡的規則教會我,無規矩 不程式設計EsLint程式設計
- 如何確定自己是否適合做程式設計師?程式設計師的成長需要什麼?程式設計師
- 業務規則引擎平臺如何降低程式設計師工作量? - brcommunity程式設計師Unity