用哪种语言写的应用漏洞最严重?六大主流语言代码漏洞分析出炉
moboyou 2025-08-19 19:35 1 浏览
机器之心编译
编辑:Panda
静态代码分析安全公司 Veracode 近日发布了一份应用程序分析报告,结果发现比起 JavaScript 和 Python 等语言,C++ 和 PHP 的安全漏洞要严重得多。
如果你是一位靠 .NET、C++、Java、JavaScript、PHP 或 Python 吃饭的开发者,那要注意了:一项新研究揭示了这些编程语言的主要安全漏洞。
静态代码分析安全公司 Veracode 近期发布了这些语言的漏洞类型数据,这是该公司扫描了 13 万应用程序的安全问题后得到的报告。
该公司调查了用 .NET、C++、Java、JavaScript、PHP 或 Python 编写的应用程序的漏洞趋势。这些数据整合在 Veracode 的《软件安全状态第 11 卷(State of Software Security Volume 11)》报告中:
https://www.veracode.com/sites/default/files/pdf/resources/ipapers/security-flaw-heatmap/index.html。
Veracode 扫描 13 万个应用程序后得到的漏洞类型数据。
对于最常用的前端开发语言 JavaScript,Veracode 发现 31.5% 的应用至少有一个跨站脚本(XSS)漏洞,而用 PHP 写的应用中有 74.6% 至少有一个 XSS 漏洞。此外,71% 的 PHP 应用存在加密问题。
对于用 .NET 写的应用,最主要的问题是信息泄露——62.8% 的 .NET 应用存在该问题。C++ 应用最大的问题是错误处理,占到了 66.5%。
至于 Java 应用,首要问题是 CRLF 注入(回车或换行注入),占受调查应用的 64.4%。Python 应用中最严重的安全问题与加密相关,出现在 35% 的受调查应用中。
每种语言的漏洞严重性也存在很大差别。Veracode 发现用 C++ 写的应用中有 59% 存在非常严重的漏洞;而对于 PHP,这一数字为 52%。但是,用 JavaScript 写的应用仅有 9.6% 有非常严重的漏洞,Java 应用的数据为 24%。
Veracode 首席研究官 Chris Eng 解释了不同语言漏洞趋势不同的原因,以及如何修复它们以避免严重损失。
「从整体数据上看,我们这个行业过去十年来没能消除任何一种漏洞类别。」Eng 说,「没有任何问题完全消失。很多事情都在波动,但看看平均情况,你会发现相比于其它指标,这些数据更能反映语言选择和语言流行程度的变化。我们看到 C++ 常见的缓存溢出问题有下降的趋势,但这并不是因为开发者处理这些问题的能力更强了,而是因为使用 C++ 进行开发的人变少了。」
另一方面,影响 JavaScript 和 Python 的问题则有所增长,原因是这两种语言现在非常流行。在企业层面上,Java 和 .NET 依然备受欢迎。
PHP 依然是网页应用开发最常用的脚本语言之一,但 Eng 指出 PHP 漏洞数量更高的原因是该语言提供了大量不安全的原语以及大量错误开发的方式。
「有些语言会尽力避免开发者考虑不周而把事情搞砸,.NET 就是其中最早的语言之一。」Eng 解释说,「相比于使用 PHP,使用 .NET 时,你会发现大量 API 都有更安全的默认设置,使得出现跨站脚本错误或 SQL 注入错误会困难得多。在 PHP 中,这些错误几乎是默认的——除非你刚好在使用一种能为你提供更多保护的更现代框架。使用 PHP 出错的情况实在太多了。」
Veracode 在其分析的 JavaScript 应用中发现的漏洞远远更少,但即使 JavaScript 有更安全的默认设置,庞大的 npm 生态系统中的 JavaScript 和 node.js 开源软件库是潜在的薄弱环节。
「即使你能修复自己写的代码中的所有漏洞,你使用的第三方软件库仍会带来诸多变数。」Eng 说,「打补丁实际上并不如你期望的那么好。现在的趋势是开发者在需要时才会去下载这些软件库的最新版本,然后他们就再也不更新了,除非这个软件库又增加了什么新功能。」
工程开发和产品团队应该如何降低为关键应用程序打补丁的麻烦和成本?Eng 的建议是保持更新并且清晰地跟踪构建应用的技术和安全成本随时间的变化情况。在某个时间,该应用将需要得到修复或打补丁,其中包括语言更新和关键软件库的补丁。
Eng 说:「如果我现在在使用 4.5 版,而 4.6 版已经出来了,我可以使用该补丁,同时几乎不会产生功能方面的影响。开源软件库不会在小版本更新中对软件库进行重大修改。但如果你现在使用的是 2.0 版,那么你就必须得更新到 4.6 版,这个过程会很痛苦」。
对于使用庞大 npm 生态系统的 JavaScript 来说,更新软件库这个问题可能会更严重一点,但 Java 和 Python 都有各自的大型生态系统:Maven 和 PyPI。
Eng 表示 JavaScript 应用平均有大约 400 个依赖关系。如果来看第 90 百分位数的 JavaScript 应用程序,它们的依赖关系数量可达 1000 或 2000 个。
应用安全公司 Snyk 曾解释说影响 JavaScript、Ruby、Java、PHP 和 Python 的大多数安全漏洞都源自项目中加载的主要组件之间的间接依赖关系。
还有一点,某些 JavaScript 软件库非常受欢迎,多达 80%-90% 的 JavaScript 应用在使用它们。
Eng 说:「只要这些软件包中某一个包里有一个漏洞,你就继承了该风险。而且这不只是安全风险。」
他指的是 JavaScript 软件库 left-pad 曾出现过的情况:2016 年的一场争吵之后,一个开发者将该软件库移出了 npm。
「它从 GitHub 上消失了,然后突然之间,三分之二的互联网崩溃了,因为它们全都依赖这个几行代码的软件库来确定一个数是否在左侧填充了零。」
原文链接:https://www.zdnet.com/article/programming-language-security-these-are-the-worst-bugs-for-each-top-language/
相关推荐
- php通过IP地址查询详细信息_php根据ip获取位置
-
前言:以前找过很多查询ip地址信息的工具,有的没有经纬度,有的没有国外的信息。现在本人制作的这个可以查询全国ip的信息,并且给出ip地址所在地的经纬度信息!以下为php程序代码截图...
- 今晚拿下PHP反序列化的一系列操作
-
引言在CTF中反序列化类型的题目还是比较常见的,之前有学习过简单的反序列化,以及简单pop链的构造。这次学习内容为php内置的原生类的反序列化以及一点进阶知识。在题目给的的代码中找不到可利用的类时,这...
- 关于 PHP 启动 MongoDb 找不到指定模块问题
-
前言:最近有一个小demo,需要通过PHP将用户行为记录储存到MongoDB,再用Spark做协同过滤。由于以前处理跨语言交互是通过消息中间件,这次本地使用MongoDB却弄出了几个问...
- PHP8中查询数组中指定元素-PHP8知识详解
-
php是使用最广泛的web编程语言,数组是一个数据集合,数组是一种非常常用的数据类型。在操作数组时,有时我们需要查询数组中是否有某个指定元素。在实际的程序开发中,我们用到了下列方法来查询数组中指定的元...
- 通过代码执行或命令执行写Shell_命令执行和代码执行
-
公众号:白帽子左一专注分享渗透经验,干货技巧...本文由团队手电筒分享,如果你还是个小白担心看不懂,没关系,“三步写马””如何上传木马”“如何拿下服务器并妥善管理”等实战内容可以结合视频观看,视频演示...
- ThinkPHP6初步搭建API服务_thinkphp6 api
-
ThinkPHP6正式发布已有一小段时间,按照官方文档实操了一遍。中间也遇到些小问题,在网上找解决方案花费了一些时间。本次分享整理了ThinkPHP6从头开始部署的详细操作步骤,希望能够帮助大家节省探...
- 第②章 在逃火锅难民与椒盐喷嚏_椒盐蛋解说我的世界
-
意识像沉在深海的破船,一点一点被光线和声音打捞上来。林琳,不,现在是李琳琅了,躺在宽大得能跑马的雕花拔步床上,瞪着头顶繁复的藻井彩绘,第无数次确认自己不是在做梦。鼻腔里充斥着淡淡的、混合了药味、熏...
- 美团外卖特征平台的建设与实践_美团外卖的技术分析
-
随着美团外卖业务的发展,算法模型也在不断演进迭代中。本文从特征框架演进、特征生产、特征获取计算以及训练样本生成四个方面介绍了美团外卖特征平台在建设与实践中的思考和优化思路。1背景美团外卖业务种类繁多...
- 分库分表实战(第2期):最初的我们——了解一下单库外卖订单系统
-
前言上一期内容我们整体了解了分库分表实战项目当前使用的系统架构,也就是单库版本订单系统的系统架构。同时,我们也知道了未来要做的分库分表版本的订单系统架构。现在,我们就从单库版本的订单系统开始,一步一...
- “美团外卖小哥帮崩溃程序员写代码”视频遭质疑:自编自导自演
-
来源:三言财经近日,有网友质疑走红网络的“青岛外卖小哥帮崩溃程序员写代码”的视频是一起策划。有网友认为,就算是行业人员转行送外卖,一上手就能看懂对方的代码并开始马上写的行为太假;还有网友表示,配音搞成...
- HarmonyOS NEXT仓颉开发语言实战案例:外卖App
-
各位周末好,今天为大家来仓颉语言外卖App的实战分享。我们可以先分析一下页面的布局结构,它是由导航栏和List容器组成的。幽蓝君目前依然没有找到仓颉语言导航栏的系统组件,还是要自定义,这个导航栏有三部...
- 基于微信小程序的外卖点餐的设计与实现-计算机毕业设计源码
-
摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了微信小程序外卖点餐的设计与实现的开发全过程。通过分析微信小程序外卖点餐的设计与实现管理的不足,创建了一个...
- 外卖源码和外卖平台系统租赁有什么区别?
-
外卖源码和外卖平台系统租赁是两种不同的模式,它们之间有什么区别?我们来看看吧。1.概念不同:外卖源码是指一种软件源代码,包括了外卖平台的核心代码、框架、功能模块等,需要用户自己进行二次开发和定制。更...
- Java项目本地部署宝塔搭建实战java外卖小程序源码
-
大家好啊,我是测评君,欢迎来到web测评。本期给大家带来一套java开发的外卖小程序源码,这套系统已经完成了线下配送的大部分功能,适合学习与二次开发。技术架构技术框架:springboot+ssm...
- 一周热门
- 最近发表
- 标签列表
-
- 外键约束 oracle (36)
- oracle的row number (32)
- 唯一索引 oracle (34)
- oracle in 表变量 (28)
- oracle导出dmp导出 (28)
- oracle两个表 (20)
- oracle 数据库 字符集 (20)
- 多线程的创建方式 (29)
- 多线程 python (30)
- java多线程并发处理 (32)
- 宏程序代码一览表 (35)
- c++需要学多久 (25)
- css class选择器用法 (25)
- css样式引入 (30)
- css教程文字移动 (33)
- php简单源码 (36)
- php个人中心源码 (25)
- php小说爬取源码 (23)
- 云电脑app源码 (22)
- html画折线图 (24)
- docker好玩的应用 (28)
- linux有没有pe工具 (34)
- mysql数据库源码 (21)
- php开源万能表单系统源码 (21)
- 可以上传视频的网站源码 (25)