现代C救不了程序员CSDN

北京中科白癫分医院 http://m.39.net/pf/a_5154125.html

经常有程序员为C++辩护说:“只要你不使用任何从C继承过来的功能,C++就是安全的”!但事实非如此。根据本文作者在大型C++项目上(遵从现代的惯用做法)的经验来看,C++提供的类型完全不能阻止漏洞的泛滥。本文中就会给出一些完全根据现代C++的惯用做法编写的代码,你会发现这些代码仍然会引发漏洞。

作者

AlexGaynor

译者

弯月

责编

郭芮

以下为译文:

我经常批评内存不安全的语言,主要是C和C++,以及它们引发的大量安全漏洞。根据大量使用C和C++的软件项目的审查结果,我得出了一个结论:软件行业应该使用内存安全的语言(例如Rust和Swift)。

人们常常在回复我时说,这个问题并不是C和C++本身的问题,而是使用这两种语言的开发者的错。

具体来说,我经常听到人们为C++辩护说:“只要你不使用任何从C继承过来的功能,C++就是安全的”(我理解这句话指的是原始指针、数组作为指针使用、手动malloc/free以及其他类似功能。但我认为有一点值得注意,由于C的特性明确地融入了C++,那么在实践中,大部分C++代码都需要处理类似的情况。),或者类似的话,比如只要遵从现代C++的类型和惯用做法,就不会引发内存方面的漏洞。

我很感谢C++的智能指针类型,因为这种类型的确非常有用。不幸的是,根据我在大型C++项目上(遵从现代的惯用做法)的经验来看,光靠这些类型完全不能阻止漏洞的泛滥。我会在本文中给出一些完全根据现代C++的惯用做法编写的代码,你会发现这些代码仍然会引发漏洞。

掩盖“释放后使用”的引用

我想说的第一个例子最初是KostyaSerebryany提出的(


转载请注明:http://www.aierlanlan.com/rzfs/5155.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了