Linux下的代码淬火技术
作者: 出处:it168.com 更新时间:2007-09-03 责任编辑:liuhao
 
 

我们知道,铁匠经常把金属工件加热到一定温度,然后突然浸在水或油中使其冷却,从而有效增加其硬度。类似的,软件开发人员也可以采取某种手段,从而显著提高软件的可靠性和质量,我们形象地称之为代码淬火技术。

相关文章:
在Linux中用防火墙抵挡黑客攻击
操作系统安全防护技巧介绍之Linux篇 

一、代码淬火的好处

理想中,软件淬火技术首先能够预见代码中的哪些地方可能出错,然后,要么带给我们一种能够完全避免错误的方式编写代码,要么能及时识别出错误,从而更轻松地跟踪源代码。尤其是对于C语言,因为它不是一种安全语言,所以更需要软件淬火技术来提高软件的可靠性。本文将详细介绍Linux下常用的代码淬火方法。

二、常见的码淬火技术

代码淬火技术的形式各种各样,我们这里要讲的是帮助我们构建更加强健的代码的各种技术。

1 .缓冲区溢出问题

缓冲区是一个非常严重的安全问题,最好的情况下可能导致软件的行为错乱;严重时将会导致被缓冲区利用程序所控制而执行任何攻击者所想要执行的代码。请看下面的示例代码:

static char ourArray[100];
...
int i;
for ( i = 0 ; i < 100 ; i++ ) {
ourArray[i] = (char)(0x30+i);
}
ourArray[i] = 0; // 越界,危险!

上例中,我们的赋值操作已经越过了数组的边界。它并没有在我们的数组内执行写操作,它是在数组边界之后的第一个字节内进行的写操作。换句话说,数组之后的第一个对象,无论它是结构体也好,还是指针也罢,现在已经被破坏了。为了改变这种糟糕的情况,我们只需要养成一种良好的习惯,那就是使用符号常量来指示数组的边界。就像在下例中一样,我们创建了一个常量,来定义数组的长度。这里有一个小技巧,那就是假设我们需要的数组长度为A,那么在定义数组长度时,实际长度是A+1。这时,无论数组长度如何,可以肯定的是,数组[A]一定是该数组的边界。换句话说,我们留了一个元素的余量。如下所示:

#define ARRAY_SIZE 100
static char ourArray[ARRAY_SIZE+1];
...
int i;
for (i = 0 ; i < ARRAY_SIZE ; i++ ) {
ourArray[i] = (char)(0x30+i);
}
ourArray[ARRAY_SIZE] = 0; //为数组的最后一个元素赋值

 
     
 
 
继续>>下一页
[第1页][第2页][第3页][第4页][第5页][第6页][第7页][下一页]
 
内容导航  
第1页Linux下的代码淬火技术.. 第2页Linux下的代码淬火技术..
第3页Linux下的代码淬火技术.. 第4页Linux下的代码淬火技术..
第5页Linux下的代码淬火技术.. 第6页Linux下的代码淬火技术..
第7页Linux
上一篇 : 熟悉五笔有妙招利用反查.. 下一篇奇虎呼吁举证CNNIC CNNI..
 
  您要为所发表的言论的后果负责,请各位遵纪守法并注意文明用语
标题:  

[ 关于本站 ] [ 广告服务 ] [ 商务合作 ] [ 联系我们 ] [ 合作伙伴 ] [ 法律顾问 ] [ 网站地图 ]
千橡公司 京ICP证041489号 Copyright (c) 1997-2007 All Right Reserved.