簡介
防禦性編程(Defensive programming)是防禦式設計的一種具體體現,它是為了保證,對程式的不可預見的使用,不會造成程式功能上的損壞。它可以被看作是為了減少或消除
墨菲定律效力的想法。
防禦式編程主要用於可能被濫用,惡作劇或無意地造成災難性影響的程式上。
安全編程
防禦性編程有時也被計算機科學家稱為
安全編程(Secure programming)。潛在的軟體缺陷可能會被黑客利用,而進行
代碼注入,拒絕服務攻擊或其他攻擊。
防禦性編程與非防禦性編程之間的區別在於,程式設計師不會對特定的函式調用或庫的使用情況做假設。下面是一個例子:
int risky_programming(char *input){ char str[1000+1]; // one more for the null character // ... strcpy(str, input); // copy input // ...}
當輸入超過1000個字元時,該函式將會崩潰。一些新手程式設計師可能並不會覺得這是個問題,因為沒有用戶會輸入這么長的字元串。實行防禦性編程的程式設計師不會允許這樣的錯誤,因為這段程式包含一個已知的bug,一個可能會導致
緩衝區溢出攻擊的漏洞。下面這個例子是一個解決方案:
int secure_programming(char *input){ char str[1000]; // ... strncpy(str, input, sizeof(str)); // copy input without exceeding the length of the destination str[sizeof(str) - 1] = '\0'; // if strlen(input) == sizeof(str) then strncpy won't NUL terminate // ...}
計算機安全
計算機安全(computer security)是計算機與網路領域的
信息安全(information security)的一個分支。其目的是在保證信息和財產可被受權用戶正常獲取和使用的情況下,保護此信息和財產不受偷竊,污染,自然災害等的損壞。計算機系統安全是指一系列包含敏感和有價值的信息和服務的進程和機制,不被未得到授權和不被信任的個人,團體或事件公開,修改或損壞。由於它的目的在於防止不需要的行為發生而非使得某些行為發生,其策略和方法常常與其他大多數的計算機技術不同。
健壯性
計算機科學中,
健壯性(英語:Robustness)是指一個計算機系統在執行過程中處理錯誤,以及算法在遭遇輸入、運算等異常時繼續正常運行的能力。 諸如
模糊測試之類的
形式化方法中,必須通過製造錯誤的或不可預期的輸入來驗證程式的健壯性。很多商業產品都可用來測試軟體系統的健壯性。健壯性也是
失效評定分析中的一個方面。