Delphi 是一种内存安全的语言吗?

上个月,美国政府发布了 "回到基石 "报告: 通往安全和可衡量软件之路 "的报告。该报告是美国网络安全战略的一部分,重点关注多个领域,包括内存安全漏洞和质量指标。

许多在线杂志都对这份报告进行了评论,强调了对 C 和 C++ 编程语言的大力反击。

其中一些文章包括:

  • 白宫敦促开发人员放弃 C 和 C++   作者:InfoWorld
  • 白宫敦促开发人员避免使用 C 和 C++,使用 "内存安全 "编程语言 by Tom's Hardware
  • 白宫敦促科技公司采用安全的程序语言: by readwrite

目录

一、美国政府报告对内存安全语言有何论述?

二、美国国家安全局是否把 Delphi 列为内存安全语言?

三、使用内存安全语言是否意味着我可以完全避免安全风险?

四、美国国家安全局和美国政府将 Delphi 列为内存安全语言--它还推荐了什么?

五、什么是供应链安全?

六、Embarcadero 正在采取哪些措施来帮助应对安全风险?


一、美国政府报告对内存安全语言有何论述?

报告重点关注 "内存安全漏洞",并挑出了 "既缺乏与内存安全相关的特征,又在关键系统中高度扩散的编程语言"。报告继续建议 "按照网络安全和基础设施安全局(CISA)开放源代码软件安全路线图的建议,从一开始就使用内存安全的编程语言。

参考文献是《美国国家安全局关于软件内存安全的网络安全信息表》(NSA Cybersecurity Information Sheet on Software Memory Safety)。这份文件更详细地解释了什么是内存安全,认为内存安全是类型安全、安全分配和删除(可能有垃圾收集器)的混合体。本段为核心内容:

使用内存安全语言有助于防止程序员引入某些类型的内存相关问题。内存是作为计算机语言的一部分自动管理的;它不依赖于程序员添加代码来实现内存保护。计算机语言通过结合使用编译时和运行时检查来实现自动保护。这些固有的语言特点可以保护程序员不会无意中引入内存管理错误。内存安全语言的例子包括 Python®、Java®、C#、Go、Delphi/Object Pascal、Swift®、Ruby™、Rust® 和 Ada。即使使用内存安全语言,内存管理也并非完全安全。

二、美国国家安全局是否把 Delphi 列为内存安全语言?

是的,Delphi 被列为内存安全语言。一些文章最初报道的安全语言列表较短,只包括一些最流行的语言,不包括 Delphi。后来,根据美国国家安全局的报告,对该列表进行了更正。

考虑到 Delphi 缺少内存安全的特征之一--垃圾回收,Delphi 社区就是否认为该语言安全进行了一些讨论。不过,官方的评估是基于多种理由并考虑到其他因素后做出的:

  • 安全编程语言的一个核心特征是拥有强大的类型系统,并在编译时而不是运行时验证数据类型映射。动态语言,即使有垃圾回收器,也会有不足之处,可能会出现运行时错误,从而影响其安全性。
  • 另一个因素是在一般代码中不必使用指针和更直接的内存管理。虽然 Delphi 并不禁止使用直接内存访问,但这种情况相当少见。即使没有 GC,Delphi 也能提供自动和简化内存管理的机制。

三、使用内存安全语言是否意味着我可以完全避免安全风险?

另一个总体考虑是,内存安全是一个目标,但不是绝对的。例如,主要报告强调,在某些类型的应用中,执行时间的可预测性至关重要(指航空航天工业)。在这些应用中,垃圾回收器在不可预测的时间启动,可能会影响具有关键时序的代码的程序执行。正是由于这个原因,Delphi 与工业自动化领域的其他流行语言相比具有显著优势。它允许直接控制,同时与 C++ 相比保持在更高和更简单的水平上。

四、美国国家安全局和美国政府将 Delphi 列为内存安全语言--它还推荐了什么?

报告在建议向内存安全语言转变的同时,还强调了静态代码分析正式方法的使用,尤其是在安全方面。我们发现 Delphi 在这一领域的兴趣也在不断增长,我们一直在推广在这一领域提供帮助的第三方工具。

此外,还有很长一部分内容是关于基于硬件或 CPU 级别的内存安全性执行。在同一领域,美国国家安全局的原始报告强调了利用控制流防护(CFG)、地址空间布局随机化(ASLR)和数据执行防护(DEP)等功能的重要性。其中一些安全设置已在最近的 Delphi 版本中强制执行,现在已成为新项目的默认设置。

五、什么是供应链安全?

最后,还有一个很长的领域涉及库依赖链的安全,有时也被称为 "供应链安全",主张使用正式的方法来评估库的安全性,包括开源库的安全性。越来越多的人担心,许多项目的大量依赖性正在扩大安全风险,这不是由于项目代码,而是由于所使用的库。在这方面,报告详细描述了 Log4j Java 库中的 Log4Shell 漏洞。该库漏洞影响了 Java 这样的内存安全语言,用报告的话说,它显示了 "一个关键的弱点,恶意行为者可以通过它入侵全世界的计算机系统"。报告继续指出,"这一漏洞凸显了帮助确保开源生态系统安全的迫切需要,而开源生态系统促进了全球范围内的巨大创新"。

六、Embarcadero 正在采取哪些措施来帮助应对安全风险?

显然,从政府机构到各种规模的企业,各个层面对软件安全的关注都在不断增加。甚至在白宫和美国国家安全局发布报告,将 Delphi 列为内存安全语言之前,Embarcadero 就已经将安全性视为客户日益关注的问题。我们将一如既往地专注于投资和改进 Delphi 对现代安全技术的支持,并在此基础上提供有关真正风险和可用缓解措施的明确教育。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信息传播的AI时代:机器学习赋能新闻出版业的数字化之旅

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

中间件复习之-RPC框架

什么是RPC框架? RPC(Remote Procedure Call):远程过程调用。当多个应用部署在多个服务器上时,由于他们不在一个内存空间上,因此需要网络来进行通信,而RPC允许它像调用本地方法一样调用远程服务。 RPC原理 服务消费方通过RPC客户…

数据结构—堆

什么是堆 堆是一种特殊的树形结构,其中每个节点都有一个值。堆可以分为两种类型:最大堆和最小堆。在最大堆中,每个节点的值都大于等于其子节点的值;而在最小堆中,每个节点的值都小于等于其子节点的值。这种特性使得堆…

leetcode题库练习9\268\771

Leetcode: 9 回文数 简单的想法就是将数字转化为字符进行比较&#xff0c;但是这样占空间 class Solution { public:bool isPalindrome(int x) {if(x < 0) return false;if(x < 10 && x > 0) return true;vector<int> num;while(x > 9){num.push_b…

Three.js——scene场景、几何体位置旋转缩放、正射投影相机、透视投影相机

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

Vue tree自定义滚动条位置

贴一张效果图&#xff0c;我的效果不方便贴出来 实现支持&#xff1a; 1、懒加载 2、普通加载 下面贴关键思想&#xff1a; document有一个获取element元素的方法。 let element document.getElementById(tree); let arr document.querySelectorAll(".nodelModel&quo…

用JSch实现远程传输文件并打包成jar

本文将简单介绍一下 JSch 这个Java的第三方库的一个简单用法&#xff0c;并以此为实例&#xff0c;讲解 IntelliJ 中打包成 jar 包的2种方式。 实现目标 我们的目标是&#xff0c;做出一个jar包&#xff0c;它能够实现类似于 scp 命令的远程传输文件的功能。用法如下&#xf…

arm的状态寄存器

目录 一、arm 的 PSRs二、CPSR2.1 CPSR_cxsf 三、SPSR四、APSR 一、arm 的 PSRs arm 中有很多程序状态寄存器&#xff08;Program Status Registers&#xff0c;PSRs&#xff09;用于存储处理器的状态信息&#xff0c;包括 CPSR\SPSR\FPSR\APSR 等&#xff1a; CPSR&#xff…

OpenHarmony实战:Makefile方式组织编译的库移植

以yxml库为例&#xff0c;其移植过程如下文所示。 源码获取 从仓库获取yxml源码&#xff0c;其目录结构如下表&#xff1a; 表1 源码目录结构 名称描述yxml/bench/benchmark相关代码yxml/test/测试输入输出文件&#xff0c;及测试脚本yxml/Makefile编译组织文件yxml/.gitat…

计算机网络-从输入网址到访问网站的全过程

当我们在浏览器中输入一个网址并按下回车键时&#xff0c;会发生一系列复杂的过程&#xff0c;最终使我们能够看到网页的内容。以下是这个过程的详细步骤&#xff1a; 客户端&#xff1a;首先&#xff0c;用户在浏览器中键入网址&#xff0c;然后浏览器会根据这个网址生成一个H…

MySQL count函数的使用

count&#xff08;&#xff09;函数在使用时参数好像不能设置为表达式&#xff0c;只能设置成指定字段或* 比如在查询性别为男的成员数目时不能写&#xff1a; select count(gendermale) from user_profile ; 否则直接得到6&#xff0c;也就是等价于select count(gender) fro…

java子集(力扣Leetcode78)

子集 力扣原题链接 问题描述 给定一个整数数组 nums&#xff0c;数组中的元素互不相同。返回该数组所有可能的子集&#xff08;幂集&#xff09;。解集不能包含重复的子集。可以按任意顺序返回解集。 示例 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#x…

LabVIEW专栏三、探针和断点

探针和断点是LabVIEW调试的常用手段&#xff0c;该节以上一节的"测试耗时"为例 探针可以打在有线条的任何地方&#xff0c;打上后&#xff0c;经过这条线的所有最后一次的数值都会显示在探针窗口。断点可以打在程序框图的所有G代码对象&#xff0c;包括结构&#xf…

NVIDIA Jetson Xavier NX入门-镜像为jetpack5(3)——pytorch和torchvision安装

NVIDIA Jetson Xavier NX入门-镜像为jetpack5&#xff08;3&#xff09;——pytorch和torchvision安装 镜像为jetpack5系列&#xff1a; NVIDIA Jetson Xavier NX入门-镜像为jetpack5&#xff08;1&#xff09;——镜像烧写 NVIDIA Jetson Xavier NX入门-镜像为jetpack5&#…

第14章 数据结构与集合源码

一 数据结构剖析 我们举一个形象的例子来理解数据结构的作用&#xff1a; 战场&#xff1a;程序运行所需的软件、硬件环境 战术和策略&#xff1a;数据结构 敌人&#xff1a;项目或模块的功能需求 指挥官&#xff1a;编写程序的程序员 士兵和装备&#xff1a;一行一行的代码 …

代码随想录-力扣刷题-总结笔记02

代码随想录&#xff1a;代码随想录力扣&#xff1a;力扣 (LeetCode) 全球极客挚爱的技术成长平台 代码随想录-力扣刷题-总结笔记01代码随想录-力扣刷题-总结笔记02 目录 01、代码随想录 00、其他 ArrayList转数组 07、二叉树 7.0、递归法 7.1、二叉树的层序遍历模板 7.2…

vite.config.js

Vue3vite vite和webpack区别&#xff1f; 1.vite服务器启动速度比webpack快&#xff0c;由于vite启动的时候不需要打包&#xff0c;也就无需分析模块依赖、编译&#xff0c;所以启动速度非常快。当浏览器请求需要的模块时&#xff0c;再对模块进行编译&#xff0c;这种按需动态…

RPA自动化微信自动清理僵尸粉工具

1、视频演示 RPA自动化清理微信僵尸粉 2、核心功能点 通过给好友测试转账&#xff0c;如果能转账则表示是正常的好友关系&#xff0c;否则&#xff0c;则表示对方将你拉黑或者删除了。 3、流程图 4、代码长图分享 5、使用手册 1、准备好一部安卓手机和一根可以调试手机的USB…

搞学术研究好用免费的学术版ChatGPT网站-学术AI

学术版ChatGPThttps://chat.uaskgpt.com/mobile/?user_sn88&channelcsdn&scenelogin 推荐一个非常适合中国本科硕士博士等学生老师使用的学术版ChatGPT&#xff0c; 对接了超大型学术模型&#xff0c;利用AI技术实现学术润色、中英文翻译&#xff0c;学术纠错&#…

【Leetcode笔记】102.二叉树的层序遍历

目录 知识点Leetcode代码&#xff1a;ACM模式代码&#xff1a; 知识点 vector、queue容器的操作 对vector<int> vec;做插入元素操作&#xff1a;vec.push_back(x)。对queue<TreeNode*> que;做插入元素操作&#xff1a;que.push(root);。队列有四个常用的操作&…