许多程序员并不打算编写不安全的代码 - 但结果却常常如此。以下是一些据称的原因。 其中大部分是由 Aleph One 在 Bugtraq 上收集和总结的(在 1998 年 12 月 17 日的帖子中)
大多数学校的课程中没有涉及计算机安全的内容。 即使有计算机安全课程,他们通常也不会讨论如何编写安全的程序。 许多这样的课程只研究某些领域,例如密码学或协议。 这些很重要,但它们通常未能讨论常见的现实世界问题,例如缓冲区溢出、字符串格式化和输入检查。 我认为这是最重要的问题之一; 即使是那些上过大学的程序员也很难学会如何编写安全的程序,然而我们却依赖这些人来编写安全的程序。
编程书籍/课程不教授安全/可靠的编程技术。 实际上,直到最近,根本没有关于如何编写安全程序的书籍(本书是少数几本之一)。
没有人使用形式验证方法。
C 是一种不安全的语言,标准的 C 库字符串函数也是不安全的。 这尤其重要,因为 C 被广泛使用 - 使用 C 的“简单”方法允许危险的漏洞利用。
程序员不考虑“多用户”。
程序员是人,而人是懒惰的。 因此,程序员通常会使用“简单”的方法而不是安全的方法 - 一旦它起作用,他们通常不会在以后修复它。
大多数程序员根本不是优秀的程序员。
大多数程序员不是安全人员; 他们只是不经常像攻击者那样思考。
大多数安全人员不是程序员。 这是 Bugtraq 的一些贡献者提出的说法,但尚不清楚这种说法是否真的正确。
大多数计算机安全模型都很糟糕。
存在大量“损坏”的遗留软件。 修复此软件(以消除安全漏洞或使其与更严格的安全策略一起工作)是很困难的。
消费者不关心安全。(就我个人而言,我希望消费者开始关心安全;一个不断被利用的计算机系统既不好用也不友好。 此外,许多消费者没有意识到甚至存在问题,认为它不会发生在他们身上,或者认为事情无法变得更好。)
安全需要额外的开发时间。
安全在额外测试方面有成本(红队等)。