如果有的话,一些编程语言本质上是如何不安全的?

信息安全 编程
2021-08-19 20:45:32

是不是用某些语言编写的应用程序本身就不太安全,无论您多么努力地弄清楚它吗?

或者,会不会是某些编程范式不如其他编程范式安全?

也就是说,安全关键软件的开发是否应该考虑避免或使用(或谨慎使用)某些语言?

1个回答

安全编程是正确编程的一个子集——每个可利用的漏洞基本上都是一个错误,因此执行该错误的后果对恶意的个人(“攻击者”)有利。

语言提供了有助于或无助于进行正确编程的设施。例如,如果手头的任务涉及使用字符串做事,那么具有字符串固有类型的语言,作为不可变值处理,会使开发人员的事情变得更容易。许多现代语言,如 C#、Python、PHP 甚至 Javascript 都属于这一类。相反,像 C 和汇编这样的低级语言要求开发人员处理保存字符串的缓冲区的分配,处理所有长度并在适当的时间解除分配。从这个意义上说,在处理字符串时,C 和汇编语言比大多数其他语言“不那么安全”,因为它们需要开发人员更加小心“关怀”是一种稀缺资源。

同样,一些语言包含很多“魔法”,例如自动转换类型,这意味着看似简单的表达式可能隐藏了很多复杂性,这可能会咬到粗心的开发人员。一些现代语言,如 C#、Python、PHP 或 Javascript 都有这个缺陷。相反,像 C 和汇编这样的低级语言往往更“安全”,因为它们所做的一切都是明确的。开发人员只需阅读他眼前的内容,对解释器/编译器将做什么的心理推断更少。“思考时间”是一种稀缺资源。

没有任何一种范式本质上比其他范式更不安全。然而,缺乏明确的范式肯定是不安全的。归根结底,安全编程是关于一个知道自己在做什么的开发人员,这来自于纪律

编辑: “纪律”意味着永远不要编写任何代码,其在正常和异常输入数据的所有可能组合下的完整行为未被开发人员完全理解。特别是,这意味着在事物接受运行之前,不要将代码放在一起并进行调整。同样,从 Stack Overflow 复制和粘贴是很差的纪律——阅读SO 上的解决方案非常好,但必须彻底了解代码的作用。