RUST 编程语言使构建更安全的软件变得更加容易。RUST ALL THE THINGS 需要什么?

人不走空

                                                                      

      🌈个人主页:人不走空      

💖系列专栏:算法专题

⏰诗词歌赋:斯是陋室,惟吾德馨

目录

      🌈个人主页:人不走空      

💖系列专栏:算法专题

⏰诗词歌赋:斯是陋室,惟吾德馨

“内存安全不仅仅是一个技术问题,也是一个社会问题。

“基本上,我们在后端所做的所有新工作都是用 Rust 编写的。”

所以的东西都会生锈

我们专注于几乎每个人都使用的关键组件。

作者其他作品:


给各位分享一篇关于GitHub上的rust风格的开发人员如何可以使开发更加安全的博客,我已经帮大家翻译了 

设您正在使用 C++ 构建电子邮件客户端。您的新应用程序将在每天由多个不同人员使用的工作站上运行。但是在某个地方,你犯了一个错误。通过向自己发送特制的电子邮件,他们可以溢出应用程序的内存缓冲区,并发送应用程序命令以从其他用户的收件箱中检索电子邮件。

此缓冲区溢出错误是内存安全问题的典型示例,也是软件中最常见的安全问题类型之一。根据微软安全响应中心的Matt Miller的演讲,在2004年至2018年期间,Microsoft产品中修复的所有安全问题中约有70%是内存安全问题,该中心对公司报告的所有安全问题进行了分类。

内存安全是一个大问题。操作系统需要确保各个应用程序不会相互泄漏数据。Web 浏览器需要确保在一个选项卡中打开的 Web 应用无法从另一个选项卡抓取数据。云计算平台需要确保一个用户无法从另一个用户那里读取数据。

“内存安全不仅仅是一个技术问题,也是一个社会问题,”互联网安全研究小组执行董事Joshua Aas说。“内存安全问题不仅会产生有缺陷的软件。它们可能会破坏人们赖以谋生或找工作的服务。安全漏洞会剥夺我们的隐私。软件可以而且应该以更好的方式构建。

“内存安全不仅仅是一个技术问题,也是一个社会问题。

2020 年 10 月,互联网安全研究小组启动了一项名为 Prossimo 的计划,致力于促进互联网上的内存安全。到目前为止,他们的主要举措是使用 Rust 编程语言,该语言于 2010 年由 Mozilla 开源,可以更轻松地编写内存安全代码。

C、C++ 和其他需要开发人员编写代码来管理其软件内存的编程语言被认为是“内存不安全”,因为即使是很小的错误也会造成内存安全问题。“无论你的开发人员多么有才华,他们都会犯错误,”Aas说。“世界上最伟大、最有能力的系统编程团队经常会制造内存安全问题。只要看看几乎任何重大项目的安全补丁说明,你就会看到一个又一个的例子。

正如云边缘计算公司 Fastly 的工程副总裁 Laura Thomson 所说:“编写 C 就像在没有帮助的情况下进行脑部手术。

长期以来,用“内存安全”语言编写自动管理内存的软件已被证明可以减少整个安全漏洞。尽管如此,C和C++代码仍然无处不在。操作系统、网络软件、Web 浏览器和硬件驱动程序传统上都是用 C 或其面向对象的后继者 C++ 编写的。无论您使用的是 Android、iOS、Windows、Linux 还是 Mac,尽管在许多应用程序中使用了 C#、Java 和 Swift 等内存安全语言,但后台还是有很多 C/C++。

这是有充分理由的。C 和 C++ 速度很快。他们很可靠。程序员已经知道如何使用它们,其中编写了数千个开源库,并且他们几乎为每个可以想象的芯片组提供了编译器。

双手在笔记本电脑的键盘上打字

Prossimo 专注于整体内存安全,而不仅仅是 Rust。但 Rust 可能比任何其他语言都更有可能破坏系统编程的现状。

“Rust 是过去 20 年左右引入的一组新语言中的第一个,它们可以真正用于我们以前一直停留在 C 或汇编代码中构建的东西,”Fastly 首席技术官 Tyler McMullen 说。“它具有记忆性能,并且具有引人注目的类型系统,可让您用低级语言表达更高层次的概念。此外,它与其他语言的互操作性很好,可以在从嵌入式系统到服务器的许多平台上运行。

Rust 具有牵引力。在 Stack Overflow 的 2021 年开发者调查中,Rust 被评为“最受欢迎”的编程语言——这是该语言连续第六年位居榜首。与此同时,从科学计算到开源项目,例如由Node.js创建者Ryan Dahl构建的新服务器端JavaScript平台Deno,它变得越来越受欢迎。

今年,Mozilla 将 Rust 的管理权移交给了 Rust 基金会,该基金会是由亚马逊网络服务、Facebook、谷歌、华为、Microsoft 和 Mozilla 共同创立的联盟。这表明业界最大的参与者对 Rust 的未来是认真的。

例如,Facebook 现在有数百名开发人员使用 Rust,其中包括一些核心 Rust 编程语言的贡献者。Facebook 并没有放弃其他语言,但 Rust 被用于整个公司的项目,包括 Diem 区块链、Move 编程语言以及他们的 Buck 工具的下一个版本。“我们参与基金会的主要目标之一是与其他优秀的基金会成员和 Rust 社区密切合作,帮助 Rust 维护者更有效地完成他们的伟大工作,使 Rust 成为系统编程及其他领域的主流语言选择,”Facebook 开源开发者倡导者兼 Rust 基金会成员总监 Joel Marcey 说。

许多公司现在都在使用 Rust 来帮助保护他们的云计算平台,包括 Amazon Web Services、Cloudflare、Fastly 和 Microsoft Azure。

“几年前我还没有被卖掉,”麦克马伦说。但是 Fastly 的 WebAssembly 团队要求使用 Rust 构建一些项目,McMullen 对该语言的性能和安全性印象深刻。现在 Rust 是公司堆栈的核心部分。“基本上,我们在后端所做的所有新工作都是用 Rust 编写的,”Thomson 说。“我们的客户用来运行代码的计算服务都是基于 Rust 构建的。”

“基本上,我们在后端所做的所有新工作都是用 Rust 编写的。”

McMullen 说,他们的目标是确保整个数据平面管道内存的安全。“在这种环境中,我们不能信任任何人,”他说。“我们不能信任传入的流量,我们不能信任服务器上运行的代码。用 Rust 这样的语言编写可以更容易地不必信任。

AWS 在多种服务的网络堆栈中使用 Rust,包括 EC2、S3 和 CloudFront,Amazon Web Services 的 Rust 平台团队负责人 Shane Miller 说。该云平台在 Rust 中构建了大部分开源、面向容器的虚拟化系统 Firecracker,以及基于 Linux 的容器操作系统 Bottlerocket。“Rust 很快成为 AWS 大规模交付基础设施的关键,”Miller 说,他也是 Rust 基金会的主席。

使用内存安全语言进行绿地开发是一个好的开始。但是,要使 Web 更加内存安全,还需要重构旧软件。最雄心勃勃的 Rust 编程语言工作之一是推动在 Linux 中增加对 Rust 的支持,这项工作尚未得到 Linus Torvalds 的认可,他告诉 ZDnet,当谈到 Rust 时,他处于“观望阵营”。

与此同时,Linux 版 Rust 团队正在努力使 Rust 和内核很好地结合在一起。例如,Rust 标准库假设内存分配永远不会返回错误,这一概念称为“无误分配”。当内存分配失败时,进程将终止。问题在于,这可能会导致内核崩溃——换句话说,操作系统会完全停止,以响应它认为的致命错误。如果并行运行多个工作负载,这是个坏消息。由 Google 赞助的 Linux 版 Rust 团队最近使用自定义 Rust 库解决了这个问题,但项目负责人 Miguel Ojeda 写道,他希望看到这个问题在 Rust 本身的上游得到解决。“我们已经开始了这个过程,一些变化已经被上游接受了,”他在内核邮件列表上写道。

如果 Rust for Linux 被合并,这将是 Linux 内核第一次正式支持 C 或汇编语言以外的语言,内核开发人员 Greg Kroah-Hartman 说。

Linux 并不是唯一使用 Rust 的操作系统。2019 年,Microsoft Hyper-V 工程团队的 Adam Burch 在一篇博客文章中宣布,他正在用 Rust 重写 Windows 代码库的一个低级系统组件,尽管他不能说出是什么组件。“虽然这个项目还没有完成,但我可以说我对 Rust 的体验总体上是积极的。对于那些希望避免经常导致 C++ 代码库中安全漏洞的常见错误的人来说,这是一个不错的选择。

屏幕上有代码的笔记本电脑,旁边是笔记本和铅笔

所以的东西都会生锈

如果您准备好自己使用 Rust,Rust 社区提供了各种各样的资源来学习该语言。但要注意。尽管 Rust 的粉丝们喜欢这门语言,但它确实有一个问题:许多程序员抱怨说,与其他现代语言相比,Rust 的学习曲线很陡峭。“工程师们将学习 Rust 比作学习吃蔬菜,”Miller 说。“一旦他们理解了它,他们就会喜欢它,但它可能会令人生畏。所以我关注的一件事是把西兰花变成布朗尼。让学习体验变得很棒。

为了解决这个问题,亚马逊云科技正在聘请计算机科学教育专家来咨询语言的设计。一些改进很简单,例如在文档中提供其他代码示例。该公司希望为 Rust 贡献的其他想法则更为复杂。例如,重新思考 Rust 的编译器。

但即使对于 Rust 的忠实粉丝来说,仍然很难想象世界上所有的内存不安全代码都在 Rust 中被重写。旧代码需要很长时间才能停用,尤其是在它已经运行良好的情况下。Thompson Reuters 估计,目前仍有大约 2200 亿行 COBOL 正在生产中,COBOL 是一种可以追溯到 1950 年代的更古老的语言,为大约 43% 的银行系统和 95% 的 ATM 刷卡提供支持。Fortran 同样在世界各地的商业应用程序中仍然很常见。

也就是说,并非所有旧的 C/C++ 代码都需要重写。“我们并不是要解决成千上万的项目,”Aas说。“我们专注于几乎每个人都使用的关键组件。像 Web 服务器、内核、TLS、DNS、NTP 这样的东西——互联网的核心结构。

我们专注于几乎每个人都使用的关键组件。

“在某些情况下,您可以逐个组件替换软件组件,”Aas 解释道。“你可以用内存安全的库替换内存不安全的库,随着时间的推移,使整个应用程序更加内存安全。

Prossimo 与 Curl 的合作就是一个很好的例子。Curl 主要用 C 语言编写,但 Prossimo 赞助了在 Curl 中添加对基于 Rust 的 TLS 和 HTTP 网络库的支持。这使得将 Rust 用于应用程序中触及网络边缘的部分成为可能,而无需完全重写 Curl。Curl 并不默认使用基于 Rust 的库,但任何喜欢它们的人都可以打开它们。“我们希望,随着内存安全模块的测试和改进,它们最终将成为所有主要Linux发行版的默认模块,”Aas说。

同时,有一些方法可以对不安全代码进行沙盒化,以最大限度地降低与之相关的风险。例如,Fastly通过基于Rust的WebAssembly运行时运行许多基于C / C++的软件。“这是将所有软件放入 Rust 的巧妙小方法,”McMullen 说。

当然,包括安全漏洞在内的错误是不可避免的。但是,通过选择一种可以防止内存安全问题的编程语言,完全有可能消除这些问题。Rust 提供了一种越来越流行的语言,它不仅性能高、功能强大且开源,而且还使互联网对每个人来说都更安全。


作者其他作品:

【Java】Spring循环依赖:原因与解决方法

OpenAI Sora来了,视频生成领域的GPT-4时代来了

[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读

【Java】深入理解Java中的static关键字

[Java·算法·简单] LeetCode 28. 找出字a符串中第一个匹配项的下标 详细解读

了解 Java 中的 AtomicInteger 类

算法题 — 整数转二进制,查找其中1的数量

深入理解MySQL事务特性:保证数据完整性与一致性

Java企业应用软件系统架构演变史 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/602100.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Spring Ai 快速创建一个AI会话

文章目录 1、创建SpringBoot项目2、引入依赖3、修改配置文件4、一个简单的会话 前期准备 在OpenAI 注册页面创建帐户并在API 密钥页面生成令牌。 Spring AI 项目定义了一个配置属性,您应该将其设置为从 openai.com 获取的spring.ai.openai.api-key值 代码托管于gite…

sql查询数据语句

select * from 表名 where 列名 某个数据名字 查询某个表名中的某列是否有某个数据

基于卷积神经网络的高光谱图像分类详细教程(含python代码)

目录 一、背景 二、基于卷积神经网络的代码实现 1)建立卷积神经网络模型 2)训练函数代码 3)全图可视化 三、项目代码 一、背景 卷积神经网络(Convolutional Neural Networks, CNNs)在处理高光谱图像分类任务时&…

Mask RCNN(Mask_RCNN-master)简单部署

一.注意事项 1.本文主要是引用大佬的文章(侵权请联系,马上删除),做的工作为简单补充 二.介绍 ①简介: Mask R-CNN(Mask Region-based Convolutional Neural Network)是一种用于目标检测和语义…

两个手机在一起ip地址一样吗?两个手机是不是两个ip地址

在数字时代的浩瀚海洋中,手机已经成为我们生活中不可或缺的一部分。随着移动互联网的飞速发展,IP地址成为了连接手机与互联网的桥梁。那么,两个手机在一起IP地址一样吗?两个手机是不是两个IP地址?本文将带您一探究竟&a…

Apipost使用心得,让接口文档变得更清晰,更快捷

Idea和Apipost结合使用 Idea 安装插件Apipost-Helper-2.0 在【file】–>【settings】–>【Plugins】搜索 “Apipost-Helper-2.0”–>【install】,重启Idea 编写controller接口 在idea中编写业务功能及接口之后,在controller中鼠标【右键】单…

亚马逊Amazon商品详情和关键词搜索API接口分享

一、亚马逊Amazon商品详情API接口 亚马逊商品详情API接口是亚马逊平台为开发者提供的一项重要服务,它允许开发者通过程序调用API来获取亚马逊商品的相关数据。这个接口为获取商品数据提供了便利的途径,有助于用户进行商品搜索、商品分类以及数据分析等操…

Stable Diffusion基础:ControlNet之人体姿势控制

在AI绘画中精确控制图片是一件比较困难的事情,不过随着 ControlNet 的诞生,这一问题得到了很大的缓解。 今天我就给大家分享一个使用Stable Diffusion WebUI OpenPose ControlNet 复制照片人物姿势的方法,效果可以参考上图。 OpenPose 可以…

不得不聊的微服务Gateway

一、 什么是Gateway? 1.网关的由来 单体应用拆分成多个服务后,对外需要一个统一入口,解耦客户端与内部服务 2.网关的作用 Spring Cloud Gateway是Spring Cloud生态系统中的一员,它被设计用于处理所有微服务的入口流量。作为一…

Dice Semimetric Losses: Optimizing the Dice Score with Soft Labels

文章目录 Dice Semimetric Losses: Optimizing the Dice Score with Soft Labels摘要方法实验结果 Dice Semimetric Losses: Optimizing the Dice Score with Soft Labels 摘要 Soft Dice Loss(SDL)在医学图像领域的许多自动分割中发挥了关键作用。在过…

【数据库原理及应用】期末复习汇总高校期末真题试卷07

试卷 一、填空题(每空1分,共10分) 1.数据库管理系统在外模式、模式和内模式这三级模式之间提供了两层映象,其中 映象保证了数据的逻辑独立性。 2. 数据模型通常由 、数据操作和完整性约束三部分组…

vue 文本中的\n 、<br>换行显示

一、背景&#xff1a; 后端接口返回数据以\n 作为换行符&#xff0c;前端显示时候需要换行显示&#xff1b; demo&#xff1a; <p style"white-space: pre-wrap;">{{ info }}</p>data() {return {info: 1、优化图片\n 2、 优化时间\n}},项目上&#…

通配符证书价格350元

通配符SSL证书是一种特殊的域名SSL证书&#xff0c;这款SSL证书默认保护主域名以及主域名下的所有子域名&#xff0c;因此&#xff0c;子域名比较多的个人或者企事业单位开发者都倾向于选择通配符SSL证书来简化SSL证书管理过程&#xff0c;节省购买SSL证书的资金&#xff0c;降…

前端如何设置div可滚动,且设置滚动条颜色

在前端中&#xff0c;设置 div 为可滚动并通过 CSS 自定义滚动条的颜色并不是所有浏览器都直接支持的功能&#xff0c;因为滚动条的样式在很大程度上取决于操作系统和浏览器的默认样式。然而&#xff0c;你可以使用某些 CSS 属性来尝试自定义滚动条的外观&#xff0c;这些属性在…

JavaEE概述 + Maven

文章目录 一、JavaEE 概述二、工具 --- Maven2.1 Maven功能 仓库 坐标2.2 Maven之项目构建2.3 Maven之依赖管理 三、插件 --- Maven Helper 一、JavaEE 概述 Java SE、JavaEE&#xff1a; Java SE&#xff1a;指Java标准版&#xff0c;适用于各行各业&#xff0c;主要是Java…

2024 Flutter 一季度热门 issue/roadmap 进展和个人感触闲聊

因为最近的《Flutter&#xff1a;听说你最近到处和人说我解散了&#xff1f;》相关事件之后&#xff0c;不少人对于目前 Flutter 的一些进度情况比较关心&#xff0c;刚好这里做一个简要汇总&#xff0c;报告几个过去一季度相关的热门 issue/roadmap 情况&#xff0c;另外这些天…

邮件群发系统的效率怎么样?如何评估性能?

邮件群发系统的使用方法&#xff1f;邮件群发工具的关键功能&#xff1f; 邮件群发系统已成为企业、组织及个人进行信息沟通的重要工具。然而&#xff0c;当我们谈论邮件群发系统的效率时&#xff0c;我们需要从多个维度来全面分析和评估。AokSend就来介绍一下。 邮件群发系统…

ReactFlow的ReactFlow实例事件传参undefined处理状态切换

1.问题 ReactFlow的ReactFlow实例有些事件我们在不同的状态下并不需要&#xff0c;而且有时候传参会出现其它渲染效果&#xff0c;比如只读状态下我们不想要拖拉拽onEdgesChange连线重连或删除的功能。 2.思路 事件名称类型默认值onEdgesChange(changes: EdgeChange[]) >…

AI大模型探索之路-训练篇17:大语言模型预训练-微调技术之QLoRA

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

浅谈消息队列和云存储

1970年代末&#xff0c;消息系统用于管理多主机的打印作业&#xff0c;这种削峰解耦的能力逐渐被标准化为“点对点模型”和稍复杂的“发布订阅模型”&#xff0c;实现了数据处理的分布式协同。随着时代的发展&#xff0c;Kafka&#xff0c;Amazon SQS&#xff0c;RocketMQ&…