安全性不会降低应用的性能

这里存在一个普遍的谬论,认为安全控制引入所造成的开销会使应用程序变得太慢而不被客户所接受。因此当程序开发人员在对比安全性和性能的时候,性能往往会显得更加重要。这最终导致了这个应用程序会漏洞百出。

咨询公司Denim Group的CTO说:“我们应该往后退一步并且重新评估安全控制会影响性能这一断言,如果你刚刚开始就已性能的优化为主这将是一个非常错误的结论,一个明智的做法是先构建应用的安全控制,接下去如果你发现了性能问题再开始进行性能优化。”如果一个应用程序以性能为主而忽略了安全控制的话,那么最终它会因为本身的安全漏洞问题而屈服,会使软件的性能变成一个争议的话题。另外一方面,如果在程序中加入了过多的安全控制,将会影响程序的可用性。由于不可能存在两个完全相同的应用,因此也不可能创建一个适用任何程序的具体的安全控制清单。David Lindsay 说:“安全控制需要完全依赖于有问题的程序或者系统。” David Lindsay是咨询公司Cigital的安全顾问。

为了在安全性和可用性之间达到平衡,安全控制应该从风险管理的角度来看待。Lindsay说:“应该从软件的架构开始注入安全性的概念,并且在软件开发的过程中继续保持这种理念。应该在软件架构的层次就做出安全控制的决定,一旦你在架构的过程中注入了安全控制的理念,那么就应该在代码的各个部分都有安全控制的理念,并且这应该是一个程序员的职责。确保正确架构的组件植入代码中。”

这里有三个在应用中构建安全控制的实践例子。

指导前期的危险建模

危险建模在架构的过程中就进行了。从架构的角度来观察一个应用该如何构建,数据在应用中该如何传递并且如何存储数据。Lindsay说:“从应用的业务风险角度来理解安全性这也是一个方法。”从数据流在一个应用中的传递,你可以发现应用的漏洞。

进行头脑风暴

头脑风暴也是在软件的架构过程中进行的。然而危险建模是一个非常抽象结构性的过程,头脑风暴更易懂。它包括考虑用户使用场景和软件可能被错误使用的方式。举例说明,考虑一个在线银行软件。Cornell问:“在什么情况下,这会被滥用”,“我们不会希望一个非系统用户可以将钱转入到一个外部账户中,我们也不希望系统内部用户可以将别人的钱转入到他们自己的账户中。”一旦这些滥用的情况被发现,程序就可以设置一些检查点来阻止这些错误在系统中发生。

Cornell说:“如果这些在先期都做到了,那么这并不会耗费很大的成本。这样可以更加主动的发现设计中那些可能导致巨大成本去修复的缺陷。”

输入验证

Cornell认为,从编程的角度来看,输入验证是一个能够实现的最好的安全方式。然而这又让我们回到了安全控制和性能哪个重要的争论中。“有一个传统的说法,如果你做了输入控制,那么你就抹杀了系统的性能。事实上,从数据分析上来看,这是一个非常武断的结论。” Cornell说:“只有执行不力的安全控制才会影响系统的性能。”

Cornell说:“输入验证本质上是阻止了漏洞被利用的可能性.


本文原文为http://searchsoftwarequality.techtarget.com/tip/Application-development-Security-that-wont-weaken-performance

你可能感兴趣的:(外文翻译)