本模块内容
Web 应用程序为结构设计人员、设计人员和开发人员提出了一系列复杂的安全问题。最安全、最有能力抵御攻击的 Web 应用程序是那些应用安全思想构建的应用程序。
在设计初始阶段,应该使用可靠的体系结构和设计方法,同时要结合考虑程序部署以及企业的安全策略。如果不能做到这一点,将导致在现有基础结构上部署应用程序时,要不可避免地危及安全性。
本模块提供了一系列安全的体系结构和设计指南,并按照常见的应用程序 漏洞 类别进行了组织。这些指南是 Web 应用程序安全的重要方面,并且是经常发生错误的领域。
目标使用本模块可以实现:
•确定安全 Web 应用程序的重要体系结构和设计问题。
•设计时考虑重要部署问题。
•制定能增强 Web 应用程序输入验证的策略。
•设计安全的身份验证和会话管理机制。
•选择适当的授权模型。
•实现有效的帐户管理方法,并保护用户会话。
•对隐私、认可、防止篡改和身份验证信息进行加密。
•防止参数操作。
•设计审核和记录策略。
适用范围虽然本模块内容包含在 ASP.NET 安全手册中,但其适用于对开发安全 Web 应用程序感兴趣的所有人员。
如何使用本模块本模块主要提供了设计应用程序时应该遵循的一些指南和原则。
为了充分理解本模块内容,请:
•了解应用程序将会受到的威胁,以确保通过程序设计解决这些问题。阅读模块 2 威胁和对策,以了解需要考虑的威胁。模块 2 列出了可能会危害应用程序的因素。在程序设计阶段应该考虑到这些威胁。
•在应用程序易受攻击的重要环节应用系统的方法。将重点放在程序部署、输入验证、身份验证和授权、加密及数据敏感度、配置、会话、异常管理以及适当的审核和记录策略上,以确保应用程序具有责任性。
Web 应用程序的体系结构和设计问题Web 应用程序向设计人员和开发人员提出了许多挑战。HTTP 是无国界的,这意味着跟踪每位用户的会话状态将成为应用程序的责任。作为先导者,应用程序必须能够通过某种形式的身份验证来识别用户。由于所有后续授权决策都要基于用户的标识,因此,身份验证过程必须是安全的,同样必须很好地保护用于跟踪已验证用户的会话处理机制。设计安全的身份验证和会话管理机制仅仅是 Web 应用程序设计人员和开发人员所面临的众多问题中的两个方面。由于输入和输出数据要在公共网络上进行传输,因此还会存在其他挑战。防止参数操作和敏感数据泄漏是另外一些重要问题。
图 4.1 列出了安全设计方法中必须解决的其他重要问题。
图 4.1 Web 应用程序设计问题
本模块中的设计指南是根据应用程序漏洞类别进行组织的。实际经验表明,如果这些领域的设计存在薄弱环节,将会导致安全漏洞。表 4.1 列出了漏洞的类别,每个类别都突出显示了由于设计不当可能会导致的潜在问题。
表 4.1: 由于设计不当导致的 Web 应用程序漏洞及潜在问题
漏洞类别 由于设计不当而引起的潜在问题输入验证
嵌入到查询字符串、表单字段、cookie 和 HTTP 头中的恶意字符串的攻击。这些攻击包括命令执行、跨站点脚本(XSS)、SQL 注入和缓冲区溢出攻击。
身份验证
标识欺骗、密码破解、特权提升和未经授权的访问。
授权
访问保密数据或受限数据、篡改数据以及执行未经授权的操作。
配置管理
对管理界面进行未经授权的访问、具有更新配置数据的能力以及对用户帐户和帐户配置文件进行未经授权的访问。
敏感数据
泄露保密信息以及篡改数据。
会话管理
捕捉会话标识符,从而导致会话劫持及标识欺骗。
加密
访问保密数据或帐户凭据,或二者均能访问。
参数操作
路径遍历攻击、命令执行以及绕过访问控制机制,从而导致信息泄漏、特权提升和拒绝服务。
异常管理
拒绝服务和敏感的系统级详细信息的泄漏。
审核和记录
不能发现入侵迹象、不能验证用户操作,以及在诊断问题时出现困难。
部署考虑在应用程序设计阶段,应考虑公司安全策略和程序,以及部署应用程序的基础结构。通常,目标环境是固定不变的,应用程序的设计必须要反映这些限制条件。有时需要折衷考虑设计方案,例如,由于存在协议和端口限制,或是特定部署拓扑结构的要求。要在设计初期确定存在哪些限制条件,以避免日后在开发过程中出现意外;另外,应邀请网络和基础结构工作组的成员参与此过程。
图 4.2 显示了需在程序设计阶段考虑的几个程序部署问题。
图 4.2 部署考虑
安全策略和程序安全策略确定允许应用程序及其用户执行哪些操作。更重要的是,安全策略定义了一些限制,以确定不允许应用程序及其用户执行哪些操作。设计应用程序时,应在公司安全策略定义的框架内进行标识和工作,以确保您没有违反防止部署应用程序的策略。
网络基础结构组件确保您了解目标环境提供的网络结构,并了解网络的基本安全要求,如筛选规则、端口限制、支持的协议等等。
确定防火墙和防火墙策略可能会如何影响应用程序的设计和部署。在面向 Internet 的应用程序和内部网络之间可能存在防火墙将其隔开。也许还存在用于保护 数据库 的其他防火墙。这些防火墙影响了可用的通信端口,因此会影响 Web 服务器到远程应用程序和数据库服务器的身份验证选项。例如,Windows 身份验证需要附加端口。
在设计阶段,需要考虑允许哪些协议、端口和服务从外围网络中的 Web 服务器访问内部资源。还应确定应用程序设计所需的协议和端口,并分析打开新端口或使用新协议会带来哪些潜在威胁。
交流并记录所有有关网络和应用层安全的设想,以及哪些 组件 将处理哪些问题。这样,当开发人员和网络管理人员都认为对方会解决安全问题时,可以防止安全控制失败。注意网络为应用程序提供的安全防范措施。设想如果更改网络设置,可能会带来哪些安全隐患。如果实现特定的网络结构更改,将会出现多少安
查看更多关于Web 应用程序安全设计指南 - 网站安全 - 自学php的详细内容...