在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

C++ 会变成像 Rust 一样的安全语言吗?

作者:Sergio De Simone

  • 2024-05-02
    北京
  • 本文字数:1578 字

    阅读完需:约 5 分钟

C++ 会变成像 Rust 一样的安全语言吗?

对于如何使 C++ 成为一种类似 Rust 及其他内存安全语言(MSL)的安全语言,C++ 专家、ISO C++ 委员会主席 Herb Sutter 在最近的一篇文章中表达了他的看法。他的方法包括依赖工具(与其他 MSL 一样)、推广安全语言特性、不安全特性需要显式启用等等。


Sutter 指出,为了使 C++ 变得更加安全,首先要解决 4 种主要的内存安全相关的漏洞。实际上,在总共 12 类与内存安全相关的漏洞中(约占所有 CVE 的 70%),有 4 个源于越界读、越界写、空指针解引用和访问已释放内存。



根据 Sutter 的说法,C++ 已经对编写安全代码提供了广泛的支持,而且 C++ 文献早就确定了用于实现这一目标的关键规则。不过,他认为,作为一种关键的语言特性,C++ 应该严格执行这些规则,只有当程序员明确选择不遵循标准规则时,才可以使用不安全行为。


默认启用安全规则不会限制这门语言的能力,但若要采用非标准实践就需要显式做出选择,从而减少无意的风险。它可以随着时间的推移而进化,这一点很重要,因为 C++ 是一种活的语言,而敌手会不断地改变他们的攻击手法。


Sutter 还描述了一些错误的问题和认识。他指出,大多数高严重性 CVE 都与内存安全无关(尽管越界写是罪魁祸首);MSL 也有 CVE;MSL 也依赖于静态分析程序和杀毒程序等工具。因此,最终目标不可能是让 C++ 程序完全摆脱与内存安全相关的 CVE,也不是在不依赖工具的情况下强制执行内存安全规则或者使 C++ 代码在形式上可证明。


在他的文章中,Sutter 重启了一个关于 C++ 内存安全的讨论,那是由 2023 年美国国家安全局网络安全信息表引发的,它建议人们远离 C/C++ 以及其他内存不安全的语言。


作为对 NSA 报告的回应,Bjarne Stroustrup 表达了他的观点,即 C++ 可以像 Rust 一样安全,而且不用像后者那么复杂:


C++ 核心指南旨在为那些需要静态类型安全和资源安全的 C++ 开发人员提供这方面的保证,而且不会破坏代码库,他们可以在没有这类强力保证或不额外引入工具链的情况下对代码库进行管理。


在这里,Stroustrup 含蓄地指出,ISO 委员会正在开展有关 C++ profilse 的工作,其目的是使逐步采用更安全的行为并在编译时强制执行安全规则成为可能。


“Profile”是一组确定性的(deterministic)、便于强制执行(portably enforceable)的规则子集(即限制),旨在实现特定的保证。“确定性”意味着它们只需要局部分析,并且可以在编译器中实现(尽管它们不必如此)。“便于强制执行”意味着它们就像语言规则一样,程序员可以使用不同的强制执行工具,而且不同的工具对于相同的代码会给出同样的答案。


特别地,C++ profiles 包括类型安全、边界安全和生命周期安全。根据 Stroustrup 的说法,符合 profiles 规则的代码是安全的,因为其中包含安全保障。


Stroustrup 对 NSA 报告的批评引起了有些人的注意,Jimmy Hartzell 就提出了一些有根据的批评,其中包括 C++ 还不是一种内存安全的语言,线程安全等领域的考虑还比较欠缺,而 Rust 已经有很多与之相关的机制。


现在,甚至在系统编程领域,C++ 也受到 Rust(一种强大的内存安全编程语言,而且可以避免 C++ 的许多问题)的威胁。即使是在 C++ 非“遗留”的领域,也有了可行的、内存安全的替代方案,而且没有像 C++ 那么多的技术债务。


回到 Sutter 的观点,和 Stroustrup 一样,他也相信,profiles 是使 C++ 更安全的一个关键特性,可以将 C++ 代码中类型 / 边界 / 初始化 / 生命周期相关的 CVE 减少 98%,而又不限制 C++ 的能力:


我不希望 C++ 限制我的表达能力。我只是希望 C++ 能默认执行我们已经熟知的安全规则和最佳实践,如果我想的话,我也可以明确地选择不遵守。然后,我仍然可以使用完全现代化的 C++……只是更友善一些。


在文章的最后,为了帮助 C++ ISO 委员会达成 98% 的目标,他提出了一些广泛而具体的建议。相关细节,错过可惜。


原文链接:

https://www.infoq.com/news/2024/04/cpp-memory-safety-sutter/

2024-05-02 08:0010522

评论

发布
暂无评论
发现更多内容

JSAPIThree 标签使用学习笔记:在地图上添加文字和图标

map_3d_vis

学习笔记 标签 mapvthree 文字标签

海外媒体监测服务的价值重构:从数据采集到战略决策的全流程赋能

沃观Wovision

社交媒体 舆情监测 社交媒体监控 海外社交媒体监控 社媒分析

技术赋能服务:AI驱动下的国外舆情监控服务升级路径

沃观Wovision

舆情监控 海外舆情监控 舆情监控网站 境外舆情监控 国外舆情

国外舆情监控软件终极指南:从入门到精通的选择策略

沃观Wovision

舆情监控 海外舆情监控 海外舆情 社交媒体监控 舆情监测服务

AI 客服公司 Sierra ARR 破 1 亿美元;育碧推出 AI 语音游戏《队友》:语音指令掌控战局,NPC 即兴互动丨日报

RTE开发者社区

AI中台与智能体开发:智能体开发的“效率引擎”

上海拔俗

开源技术驱动与架构创新:AI领域的破局之道

澜舟孟子开源社区

人工智能 大模型

12月3日在线分享直播预告

ShineScrum

敏捷活动

为什么企业死盯第一学历?

测试人

软件测试

1688商品详情API完整指南

Datafox(数据狐)

1688商品详情接口 1688API 1688商品数据采集 1688商品详情API

NeurIPS 2025 | 从数据微调到反馈优化!可灵团队提出基于人类反馈的视频生成训练范式

快手技术

大语言模型 NeurIPS 顶会论文

工业制造的“能效协奏曲”:MyEMS如何通过“能耗-生产工况”关联模型优化设备启停时序

开源能源管理系统

开源 能源管理系统

软件测试转 AI 测试开发?这些面试题你必须知道!

测试人

人工智能 软件测试

从园区到碳中和:MyEMS如何助力区域产业集群实现多能互补与协同降碳

开源能源管理系统

开源 开源能源管理系统

数字孪生项目的开发

北京木奇移动技术有限公司

数字孪生 软件外包公司 webgl开发

移动端弱网优化:字节跳动移动端网络HttpDNS优化实践

JackJiang

网络编程 HTTP DNS httpdns

打造透明化智能车间:数控机床制造业MES系统

万界星空科技

mes 万界星空科技mes 制造业转型 数控机床行业 数控机床MES

报销单 / 申请单打印不用愁!JNPF 打印设计全流程,一键拿捏

引迈信息

智能客服新纪元:如何用AI知识库打造7×24小时在线服务

百川云开发者

通过Amazon Q CLI 集成DynamoDB MCP 实现游戏场景智能数据建模

亚马逊云科技 (Amazon Web Services)

人工智能

JimuReport 积木报表 v2.2.0 版本发布,免费的可视化报表和大屏

JEECG低代码

AI 数据可视化 报表 积木报表 报表工具

告别卡顿!海外多语言视频直播APP源码中零延迟直播功能实现方案

山东布谷网络科技

海外直播APP源码 语聊平台搭建 国际版多语言APP开发 直播源码交付

1688商品列表API完整指南

Datafox(数据狐)

1688API 1688商品数据采集 1688数据采集 1688商品列表api 关键词搜索1688商品列表

SSL证书详解:类型、工作原理与获取指南

qife122

SSL证书 加密技术

2026 出海媒体监控服务终极指南:从策略到工具选型

沃观Wovision

出海社交 出海 社交媒体监控 海外社交媒体监控 出海舆情

聊聊场景题:百万人同时点赞怎么办?这个怎么回答

程序员小富

外部合作团队接入无忧!嘉为蓝鲸DevOps基础管理平台多租户管理,数据隔离防泄露

嘉为蓝鲸

研发效能 研发协同 基础管理平台 DevOps平台 CComm

数字化转型的 “杠杆”:企业如何借助 MyEMS 在 3-12 个月内收回投资并实现持续节能

开源能源管理系统

开源 开源能源管理系统

声网 CEO 赵斌:对话式 AI 加速 RTE 进化,实时互动步入万亿分钟时代

RTE开发者社区

蚂蚁国际与巴林国家支付网络BENEFIT达成合作

Lily

移动端弱网优化:移动端网络HttpDNS优化实践

JackJiang

C++ 会变成像 Rust 一样的安全语言吗?_编程语言_InfoQ精选文章