1今天,为了解决安全问题,很多人都将目光投向安全控制,如防火墙、入侵检测系统(IDS)、内容过滤、防病毒软件、脆弱性扫描器等。依赖上述控制的主要原因是我们的软件包含许多脆弱性。我们的环境常被称为“外强内弱”。2开发一个简单的页面,在互联网上展示产品及其服务的时代已经过去。今天,需要开发客户前端、复杂的中间件和位于第三层的数据仓库,并且它们必须无缝集成在一起配合工作。当这种环境的复杂性日益增长时,跟踪错误和安全危害的任务将变得极其困难。3软件控制可以通过操作系统、应用程序或者数据库管理控制来实现,实际应用中通常组合了上述两种控制方式。每一种控制方式都有自己的长处和弱点,但是如果能够充分理解这些特点,并且在编程时给予足够的注意,那么就可以避免许多不同类型的危害。主要依赖操作系统控制的一个弱点是:尽管操作系统可以控制主体对不同客体的访问,限制主体在系统内的动作,但对应用程序内部的主体却不一定能进行这样的控制。如果应用程序自己的编程代码中存在一个安全威胁,那么操作系统很难预测或者控制这个脆弱性。操作系统是很多应用程序工作的自由环境,我们很难期望操作系统可以理解不同程序之间的细微差别以及它们的内部机制。另一方面,应用程序控制和数据库管理控制则针对特定的需求和它们了解的安全威胁。尽管应用程序可以通过限制输入数据类型或者不允许特定用户查看保存在数据库敏感字段中的数据来保护数据的安全,但是并不能阻止用户在地址协议解析(ARP)表中插入伪造的数据,这是操作系统及其网络技的责任。操作系统和应用程序控制具有它们的用途和限制。实际上,安全主要由安全产品和周边设备提供,而不是由应用系统内置的控制所提供。安全产品可以包含一系列应用程序,它们可以由集中式管理平台控制,或者进一步由应用程序控制。然而,这种方式往往不能够提供必要的安全细粒度级别,不能处理由编码和程序设计问题造成的威胁。防火墙和访问控制机制能够通过阻止攻击者利用缓冲区溢出来提供一定级别的保护,但是适当的软件开发和编码必须得到实现,而这是真正保护问题的核心。4通常,在安全性和功能性之间会存在一个平衡,而在开发过程中,功能性往往被认为是最重要的。因此,这就意味着编程人员和应用程序设计人员需要寻找一个功能需求、安全需求以及安全机制3方面之间的平衡点,这将会给本已十分复杂的应用程序开发任务增加更多的复杂性。5计算机技术领域中的很多人都已经认识到,开箱...