本页使用了标题或全文手工转换

防御性编程

维基百科,自由的百科全书
跳转至: 导航搜索

防御性编程(Defensive programming)是防御式设计英语Defensive design的一种具体体现,它是为了保证,对程序的不可预见的使用,不会造成程序功能上的损坏。它可以被看作是为了减少或消除墨菲定律效力的想法。防御式编程主要用于可能被滥用,恶作剧或无意地造成灾难性影响的程序上。[1]

安全编程[编辑]

防御性编程有时也被计算机科学家称为安全编程(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
  // ...
}

参见[编辑]

参考文献[编辑]

  1. ^ 1.3 什么是防御性编程?. 51CTO.com. 2008-08-29 [2013-03-16].