加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Secure C和大学 – 接受过缓冲区溢出培训

发布时间:2020-12-16 10:38:15 所属栏目:百科 来源:网络整理
导读:我最近在C完成了大学课程.所以我当然缺乏经验. 一些大学倾向于教他们的学生安全编程,or at least some elements.有even a video(取自here). 在C中,复制字符串,据我所知 – strcpy或string.h函数.如何在日常编程中安全地使用它? 你有一些函数,它们处理分配以
我最近在C完成了大学课程.所以我当然缺乏经验.

一些大学倾向于教他们的学生安全编程,or at least some elements.有even a video(取自here).

在C中,复制字符串,据我所知 – strcpy或string.h函数.如何在日常编程中安全地使用它?
你有一些函数,它们处理分配以防止缓冲区溢出?这是CERT secure coding standard for C.它提供示例和合规解决方案:

int main(int argc,char *argv[]) {
  /* ... */
  char prog_name[128];
  strcpy(prog_name,argv[0]);
  /* ... */
}

他们的替代方案是:

int main(int argc,char *argv[]) {
  /* ... */
  char *prog_name = (char *)malloc(strlen(argv[0])+1);
  if (prog_name != NULL) {
    strcpy(prog_name,argv[0]);
  }
  else {
    /* Couldn't get the memory - recover */
  }
  /* ... */
}

取自这里,2nd example.

但据我所知,这更具挑战性,更多代码,更多工作.为什么没有人改变图书馆本身?或者至少为什么没有人提供安全的替代库或功能,以正确的方式处理这个?

谢谢阅读,
wishi

解决方法

Posix函数(几乎在每个系统上都可用)是strdup().如果您不想分配新内存并且已经有一个想要使用的缓冲区,则使用strcpy(),但是您可以更好地了解缓冲区的大小以及字符串是否适合它.如果您不知道字符串是否适合,则strncpy()只复制给定数量的字符.因此,您可以将复制的数量限制为缓冲区大小.

除此之外,还有许多sting库以不同的方式管理字符串大小.

并且因为你标记它C:有std :: string为你做所有的内存管理,并没有给你这些问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读