免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2664 | 回复: 2
打印 上一主题 下一主题

[C] 请求检查代码的安全性 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-08 17:19 |只看该作者 |倒序浏览
本帖最后由 firecityplans 于 2011-10-08 23:31 编辑

今天小写了一个程序,感觉不是太安全,但是又找不到在哪儿,在这里请大家来讨论。谢谢了!

此socket程序主要是使用apache apr可移植库来编写的,但和C语言相关性很大。

socket server:


  1. #define  BUFLEN 30
  2. #define  PORT 5671

  3. int main()
  4. {
  5.         apr_status_t rv;
  6.         apr_pool_t *mp;
  7.         apr_socket_t *sock1 = NULL;
  8.         apr_socket_t *from = NULL;
  9.         char sndbuf[BUFLEN] = "abcdefghigklmn";
  10.         char *rcvbuf;       
  11.         apr_sockaddr_t *sa;       
  12.         apr_size_t len =30;
  13.         apr_size_t *plen = &len;       

  14.         apr_initialize();
  15.         apr_pool_create(&mp,NULL);
  16.         rcvbuf = apr_palloc(mp,BUFLEN);

  17.         if ( (rv = apr_sockaddr_info_get(&sa,APR_UNSPEC,APR_INET,PORT,0,mp)) != APR_SUCCESS )
  18.         {
  19.                 fprintf(stderr,"get sockaddr info fail: %s \n",strerror(errno));
  20.                 exit(1);
  21.         }       
  22.         if( (rv = apr_socket_create(&sock1,sa->family,SOCK_STREAM,APR_PROTO_TCP,mp) ) != APR_SUCCESS )
  23.         {
  24.                 fprintf(stderr,"create socket fail: %s \n",strerror(errno));
  25.                 exit(1);
  26.         }
  27.         if( (rv = apr_socket_bind(sock1,sa) ) !=APR_SUCCESS )
  28.         {
  29.                 fprintf(stderr,"bind socket fail :%s \n",strerror(errno));
  30.                 exit(1);
  31.         }
  32.         if( (rv = apr_socket_listen(sock1,10)) !=APR_SUCCESS )
  33.         {
  34.                 fprintf(stderr,"listen socket fail: %s \n",strerror(errno));
  35.                 exit(1);
  36.         }

  37.         while (1)
  38.         {
  39.                 if( (rv = apr_socket_accept(&from,sock1,mp) ) != APR_SUCCESS )
  40.                 {
  41.                         fprintf(stderr,"accept socket fail: %d %s \n",rv,strerror(errno));
  42.                         continue;
  43.                 }
  44.         apr_socket_send(from,sndbuf,plen);
  45.                 apr_socket_recv(from, rcvbuf, plen);   
  46.                 rcvbuf[*plen] = '\0';   
  47.                 printf("recv msg from client: %s\n, the recv len is %d\n", rcvbuf,*plen);
  48.         }

  49.     apr_socket_close(sock1);
  50.         apr_pool_destroy(mp);
  51.         apr_terminate();
  52. }
复制代码
下面是socket client:


  1. #define  BUFLEN 30
  2. #define  PORT 5671

  3. int main()
  4. {
  5.         apr_status_t rv;
  6.         apr_pool_t *mp;
  7.         apr_socket_t *sock1 = NULL;
  8.         const char *hostname = "127.0.0.1";
  9.         apr_sockaddr_t *sa;       
  10.         apr_size_t len = 30;       
  11.         apr_size_t *plen = &len;
  12.         char *bufdata;
  13.             
  14.         apr_initialize();
  15.         apr_pool_create(&mp,NULL);
  16.         bufdata = apr_palloc(mp,BUFLEN);
  17.   
  18.         if ( (rv = apr_sockaddr_info_get(&sa,hostname,APR_INET,PORT,0,mp)) != APR_SUCCESS )
  19.         {
  20.                 fprintf(stderr,"get sockaddr info fail: %s\n",strerror(errno));
  21.                 exit(1);
  22.         }
  23.         if( (rv = apr_socket_create(&sock1,sa->family,SOCK_STREAM,APR_PROTO_TCP,mp) ) != APR_SUCCESS )
  24.         {
  25.                 fprintf(stderr,"create socket fail: %s\n",strerror(errno));
  26.                 exit(1);
  27.         }   
  28.         if( (rv = apr_socket_connect(sock1,sa)) !=APR_SUCCESS )
  29.         {
  30.                 fprintf(stderr,"connect socket fail: %s\n",strerror(errno));
  31.                 exit(1);
  32.         }
  33.    
  34.         printf("input the string: \n");   
  35.         fgets(bufdata,BUFLEN, stdin);
  36.         apr_socket_send(sock1,bufdata,plen);
  37.    
  38.         apr_socket_recv(sock1, bufdata, plen);   
  39.         bufdata[*plen] = '\0';   
  40.         printf("recv msg from client: %s\n", bufdata);

  41.         apr_socket_close(sock1);
  42.         apr_pool_destroy(mp);
  43.         apr_terminate();

  44.         return 0;
  45. }
复制代码
头文件我没添加上去的。

论坛徽章:
0
2 [报告]
发表于 2011-10-08 17:58 |只看该作者
自己顶一下!我感觉安全隐患可能来自对数据和指针,还请各位指教!

论坛徽章:
0
3 [报告]
发表于 2011-10-08 19:49 |只看该作者
顶一下。。。高手如云啊。。这里。。。。
您都要指教了。。我进看懂一些。嘿嘿
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP