编程语言之争,一直以来是开发者社区的热议问题,因为开发者喜欢证明自己所使用的编程语言占据主导地位,尤其是安全性,只不过讨论的过程往往都伴随着双方的愤怒,最后不了了之。那么,你可知在众多热门编程语言中,哪个安全性更高?

 

为此,近日开源安全公司 WhiteSource 针对七种热门编程语言的安全性做了一份报告,汇总了多个来源的开源漏洞信息,其中包括国家漏洞数据库(NVD)、安全公告、GitHub 问题追踪器(Issue Tracker)和流行开源项目问题追踪器。

 

 

WhiteSource 根据开源社区过去几年间使用的流行语言,确认出 C,Java,JavaScript,Python,Ruby,PHP 和 C ++这七种比较热门的编程语言,并在这些语言的基础上,搜索数据库查看了过去十年中每种语言中已知开源安全漏洞的数量、随时间推移这些安全漏洞发生的变化、以及各语言最常见的 CWE(通用缺陷列表)。

 

 

正如上图所示,很明显居首位的是 C 语言,占到了近一半的比例。不过,这并不能说明 C 语言的安全性远低于其他热门语言,如此高的占比主要有以下几个原因可以解释:一是,C 语言的使用时间在调查语言中是最长的;二是,C 语言一般编写的代码量很大;三是,Open SSL 和 Linux 内核等基础架构背后的主要语言之一就是 C 语言。这些存在时间、体积和中心性等因素的组合,可以解释 C 语言为什么存在这么多大量已知开源安全漏洞。

 

 

此外,报告还显示了随时间的推移不同编程语言的开源安全漏洞数量变化。过去十年间,这些编程语言有着各自的高点和低点。但所有语言都有一个明显的趋势,即近两年所有语言的已知安全漏洞数量都在大幅增加,这可以看作是安全漏洞意识的提高及开源的更加普及。随着开源安全研究投入资源的增加,人们发现的安全问题数量也会变多。

 

那么,这些漏洞究竟严重到何种程度呢?调查人员研究发现高严重性的开源安全漏洞(CVSS v2 得分高于 7)时,发现除了 JavaScript 和 PHP,报告中涉及的大多数语言严重漏洞的占比处于下降趋势。此外,调查人员还研究了每种语言常见的 CWE。

 

其中,跨站脚本攻击(XSS,也称之为 CWE-79)和输入验证(也称为 CWE-20)占据了最常见的位置;另外比较突出的 CWE 有信息泄漏(CWE-200)、路径遍历(CWE-22)、权限及访问控制(CWE-264)、不正当访问控制(CWE-284)等。

 

其实,像“我的编程语言比你更安全”类似的话,现在看来更像是程序员间的打趣。如今,大多数软件开发都依赖多种编程语言来实现,而不是执着于某一编程语言。掌握已知的开源漏洞、了解团队正在使用的编程语言中的优点和缺点,这些都是确保软件项目从一开始就具有安全性的好方法。