近日开源安全公司 WhiteSource 针对编程语言的安全性做了一份报告,这份报告提出了一个新问题 —— “有哪一种编程语言比其他的更安全吗?”
编程语言之争,是开发者社区一直以来的热议问题,不过讨论的过程往往伴随着双方的愤怒及和谐的破损,不了了之。许多开发者喜欢证明他们使用的编程语言占主导地位,这个过程中经常提到的就有安全性。
近日 WhiteSource 就七种热门编程语言的安全性做了年岸度报告。该报告汇总了多个来源的开源漏洞信息,如国家漏洞数据库(NVD)、安全公告、GitHub 问题追踪器(Issue Tracker)和流行开源项目问题追踪器。
WhiteSource 根据开源社区过去几年使用的一些流行语言,确认了七种比较热门的编程语言:C,Java,JavaScript,Python,Ruby,PHP 和 C ++。在这些编程语言的基础上,WhiteSource 搜索了数据库,查看了过去十年中每种语言中已知开源安全漏洞的数量、随时间推移这些安全漏洞发生的变化、以及各语言最常见的 CWE(Common Weakness Enumeration,通用缺陷列表)。
报告显示了过去10年中不同语言的开源漏洞总数,很明显居于首位的编程语言是 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)等。
“我的编程语言比你更安全”,类似的话题可以是一种有趣的消磨时间方式。关于哪种编程语言最安全的讨论往往也会出现一些有趣的观点,而找到最终答案反而可能无法帮助你创造兼具创新性和安全性的软件。
如今,大多数软件开发都依赖多种编程语言来实现,而不是执着于某一编程语言。掌握已知的开源漏洞、了解团队正在使用的编程语言中的优点和缺点,这些都是确保软件项目从一开始就具有安全性的好方法。
最安全的编程语言没有最终赢家。WhiteSource 从研究中得出的最后一个结论是,编程语言的安全性无关于语言本身,而是取决于使用者的使用方式。开发团队使用了适当的管理方法,减轻整个 SDLC (系统生存周期)的漏洞,这才是保证项目安全的好选择。