标题:安全编码准则


了防止在程序里产生各种安全漏洞,程序员需要遵循一些必要的安全编码规则:

 

1,对输入参数进行严格检查,尤其严格检查缓存长度。

需要严格判断函数输入参数的合法性,我们称之为:严进宽出。具体点说,就是要判断函数参数中的指针是否为NULL,函数参数中缓存的长度是否在合理范围。这一点非常的重要。

 

比如同样对于下面函数原型,那么我们就需要作出如下的判断:

 

void reverse_str(char *str, size_t len)

{

    /*首先判断str指针是否为NULL或者len是否为01,这些都是特殊情况或者非法输入,因此要严格检查,严进宽出。*/

    if(str== NULL || *str=='\0'|| len==0 || len==1)

    {

        return;

    }

    //程序如果执行到这里,那么参数检测就完成了并合法了。因此可以继续完成相应的功能了。

    ......

}

 

严进宽出是写程序的一个非常好的习惯,可以避免程序在运行中出错,甚至避免各种严重漏洞的产生。比如曾经十分严重的SSL协议中的心脏流血漏洞,就是因为服务端程序在处理的时候,没有验证来自客户端对应的缓存长度的有效性,而造成了该漏洞的产生。

 

2,禁用淘汰的字符串操作函数,比如strcpy(),strcat(),sprintf()等函数,而使用更新版本的字符串和内存操作函数:strcpy_sstrcat_s StringCbxxx/StringCchxxx,strncpy()等。

 

3,主动开启操作系统提供的各种安全机制。

这些操作系统提供的安全机制包括:Security Cookiegs)机制,SafeSEH机制,DEP数据执行保护机制,ASLR地址随机化机制,堆保护机制,safeunlink, heap-cookie等各种机制,这些机制使得基于缓冲区溢出的攻击难度大大提高,有效的降低了攻击风险。


参考链接:安全机制

 



看文字不过瘾?点击我,进入周哥教IT视频教学
麦洛科菲长期致力于IT安全技术的推广与普及,我们更专业!我们的学员已经广泛就职于BAT360等各大IT互联网公司。详情请参考我们的 业界反馈 《周哥教IT.C语言深学活用》视频

我们的微信公众号,敬请关注