Elixir是安全的

2021-04-10 03:28:41

有些语言是风险的。例如,您可以在C中编写非常快的代码。您还可以编写非常严重的错误。

2019年,Microsoft Security Engineer表示,在过去的12年中,大约70%的Microsoft的安全补丁是用于C或C ++代码中的错误导致的内存安全错误的修复。

在开源中,2014年披露的臭臭虫错误允许攻击者阅读发生在服务器内存中的任何事情,这与它获得的那么糟糕。

自20世纪70年代以来,造成令人情调的类型的错误导致了安全问题。 openssl是用一个名为C的编程语言编写的,该语言也从20世纪70年代初期出发。 C以其速度和灵活性而闻名,但权衡是它对程序员来说,避免恰好这种错误。

我想尽可能地留出那样的错误。所以我始终使用编程语言,用于为ME管理内存.SINCE ELIXIR使用垃圾收集(“GC”),检查该框。

但这是事情:所有GC语言都为内存安全做了什么,Elixir也适用于安全并发。

线程安全性很难。在GitHub博客上最近的帖子,我们如何在会话处理中找到并修复了稀有种族条件,是一个很好的插图。

总之,如果仅在正确的时间内发生异常,并且如果在多个请求中只是正确的序列发生并发请求处理,则在较早响应的响应中以一个响应替换会话...此错误需要非常具体的条件:后台线程,主线程与后台线程之间的共享异常上下文,异常上下文中的回调,重用请求之间的env对象以及我们的特定身份验证系统。

因此,这是一个罕见但非常严重的虫子,由世界上最高型的开发团队创造,其中用户A会因用户B而不小心被认证。

返回退步,这是一个错误,如这种错误,这不仅是如何从如何识别多个线程,延迟回调和对象共享之间复杂的交互的技术角度来挑战,但它也是组织响应问题的能力的测试具有含糊不清的因果和风险。一项发达的产品安全事件响应团队和流程与我们的支持,安全和工程团队的主题专家的协作团队相结合,使我们能够快速分类,验证和评估本问题的潜在风险,并推动整个问题公司。此优先级排序加速了我们在日志分析中的努力,审查我们代码和基础设施的最新变化,并最终确定导致错误的潜在问题。

您的组织是否具有修复这样的错误所需的工具和专业知识?

共享变形状态是一个常见的错误来源,这使得粗糙的语言具有多线程风险。

但是,如果您在Github的规模上运行Ruby,则必须为了性能进行一些折磨。这可能是为什么GitHub团队没有放弃线程,而是工作“,使我们的代码对各种线程上下文更加强大。”

在Elixir中,我们不会直接使用线程。像垃圾收集一样,线程管理是运行时的责任。

相反,我们使用特殊的轻量级过程,由Erlang Runtime提供。创建一个很容易,因为一个微小的实验将显示。

第3项是安全的杀手。有两个人,两个进程不能分享内存;他们只能通过发送互相邮件进行沟通。

无论我们是直接生成它们,Elixir开发人员是否一直使用流程。

当我们使用Phoenix时,每个Web请求或Web套接字连接都是一个过程。每次测试都使用exunit运行是一个过程。每次背景任务,每个主管,每个文件句柄或记录器都是一个过程。

在Elixir中,您永远不会想知道您的服务器库是否在执行线程中泄漏状态.it不是。不能。

虽然在Elixir中编写并发臭体并非不可能,但你就不太可能这样做。

我来自做大规模并行分布式系统的背景,但都写在Python,我一直在担心种族条件。“哦,如果我检查这个变量怎么办,但在我之前,那么别的东西会和它混淆要将一个数字添加到它?“当我终于内化了过程如何工作[在Elixir]的情况下...它使得并行编程如此简单,如此更快,更简单。

不共享内存并仅与消息通信的过程的概念已被称为“演员模型”。它已经以许多语言实现。但与螺栓的实现不同,Elixir的运行时保证本合同荣获;一个“演员”根本无法弄乱另一个人的内存。

此外,记住垃圾收集?真正孤立的流程也使得更好。当一个进程终止时,运行时知道什么都没有别的东西使用它的内存,因此GC算法是“一切顺利。”

涵盖大多数情况,因为大多数流程都是短暂的。对于长期的进程,GC同时执行,一堆一次。所以从来没有一个“停止世界”暂停,在那里每个执行的线程都不是垃圾收集器运行时暂停。

您是否正在寻找一种可以快速构建的语言?一种语言,如果你成功,缩放将很简单?

Dockyard是一个数字产品代理商,提供自定义软件,手机和Web应用程序开发咨询。我们在使用Ember.js,React.js,Elixir,Ruby等技术提供策略,用户体验,设计和完整堆栈工程中提供特殊的专业服务。与全国人员一起,我们在美国的主要市场顾问,包括波特兰,旧金山,洛杉矶,盐湖城,明尼阿波利斯,达拉斯,迈阿密,华盛顿州和波士顿。