如何写安全的网络通讯服务器程序----避免程序崩溃的几种方式

来源:互联网 发布:深入浅出python 微盘 编辑:程序博客网 时间:2024/05/21 07:46

       首先,必须保证不使用如下三个函数:

strcpy, strcat, sprintf.

因为他们不检查目的端的大小,如果源字符串长度大于目的端的缓冲区大小,则会导致程序崩溃。

所以如果在网络服务器上使用了如上函数,假如客户端不小心发送了一个超大的字符串过来,那么服务器程序很容易崩溃。

替代方案如下:

strncpy, strncat, snprintf.

因为他们指定了目的端的大小,如果源字符串长度太长,则多余的内容会被丢弃。

 

       其次,服务器端程序一定要保证协议层的缓冲区不被堵塞。避免方法有:

1,开辟一个专门的线程,一旦缓冲区内有内容就取出来了,后续处理的快慢没有关系,再想办法出来,比如说超时等等。

2,用select或者pselect。

3,accept后开辟新的线程去处理这个客户端的连接。

       还有,如果程序中需要操作数据库,那么可以用封装成对象来连接,写入。因为这样的话,此对象的操作是在栈上的操作,出了此程序段,对象自动析构,一点残渣都不剩,如此下次再操作时菜比较安全。

       最后,如果程序中用到锁的话,除了互斥锁,还有共享锁可以考虑,因为共享锁可以同时多个线程来读。另外,使用时也可以封装成对象来使用,像操作数据库一样,最好也是使用对象,出了此程序段,对象自动析构,一点残渣都不剩,这样就不会存在锁没有释放掉的情况下,又去使用这把锁,从而导致死锁。

原创粉丝点击