其实IT安全领域很多问题和普通人的理解偏差是很大的。
1、其实很多漏洞根本不秘密,不排除有些天才般的想法冒出来的漏洞。但其实造成重大影响的漏洞很多都是非常简单,甚至已经有非常成熟的方案防范的。很多漏洞可以通过严格甚至是宽松的的单元测试就能发现,一点儿也不高深。
譬如说前阵子爆出的苹果的SSL漏洞,最基本的单元测试直接可以测出。包括这一次的Heartbleed漏洞,对代码做静态分析,或者标准的溢出单元测试也可以发现。
2、其实有些漏洞被爆出来几十年还有可能继续出现的,例如SQL注入,如此白痴古董的漏洞,纵横互联网数十年,到今天还可能存在。
3、绝大多数的开源软件代码其实根本没人看(我会说其实有很多流行的组件的代码基本不能看么?),开源软件的测试覆盖率整体上其实低于商用软件,目前已经有各种针对开源代码的恶意代码植入,极大地危害了开源软件的安全质量。例如这一次的Heartbleed漏洞就有人高度怀疑是恶意植入。
4、安全问题不存在任何通用的解决方案,也没有任何公司能把所有的防范措施做到极致。很多时候只是在安全和其他东西之间取得一个平衡。基于硬件、操作系统有无数的降低安全威胁的技术,但所有的这些技术都不可能将风险降到零。例如这次OpenSSL的缓冲区溢出漏洞,如果使用带有高级内存管理的语言/语言特性,例如C#/Java等,缓冲区溢出可能性就可以降到接近于零(只有Runtime的缺陷才可能缓冲区溢出)。
但是如果你不用,那么这些技术都无能为力,当然对于高频度使用的加密解密算法,性能是拒绝这些高级特性的一个合理的理由。所以一切都是权衡。