保护Web应用程序安全的核心防御机制

Web应用程序已经从显示所有用户共有的静态内容发展到本质上是高度复杂和动态的,对用户的动作和事件具有高度的反应性。 现代的Web应用程序响应用户的动作,并为该用户动态生成唯一的内容。 由于客户端增加了对应用程序的控制,因此出现了各种漏洞,智能客户端可以使用这些漏洞来访问不应被他查看或对其执行任何操作的应用程序部分。

在多个处理阶段进行输入处理

实际上,所有应用程序都采用在概念上相似的防御机制,尽管设计的细节和实现的有效性差异很大。 这些防御机制的核心要素是:

处理用户访问

所有应用程序都需要一个中央安全机制来控制用户对其数据和功能的访问。 典型的情况有几种不同类别的用户,例如匿名用户,普通身份验证用户和管理用户。 此外,允许不同的用户访问不同的数据集。 例如,Web邮件应用程序的用户只能访问自己的电子邮件,而不能访问其他人的电子邮件。

大多数应用程序使用互连安全机制的三重机制:

  • 身份验证:身份验证机制是授予用户访问数据和功能性的最基本的测试,它涉及确保用户实际上是他声称的身份。 没有此应用程序将使所有用户处于最低信任级别,即匿名用户。 尽管简单,但是身份验证机制在设计和实现中仍然存在广泛的缺陷。 常见问题可能使攻击者能够识别其他用户的用户名并猜测其密码。
  • 会话管理:在对用户进行身份验证之后,应用程序需要一种机制来处理经过身份验证的用户的访问。 经过身份验证的用户将访问各种页面和功能,并从其浏览器发出多个HTTP请求。 同时,其他几个用户(通过身份验证的用户和匿名用户)将使用自己的一组特权访问同一台服务器。 所有应用程序都通过为其每个用户颁发标识会话的令牌(例如JWT)来满足此要求。 浏览器在随后的每个HTTP请求中自动将此令牌提交回服务器,从而使Web应用程序可以将请求与该用户相关联。 该会话管理机制高度依赖于其令牌的安全性。 针对它的大多数攻击都试图破坏发给其他用户的令牌。
  • 访问控制:最后一步是为用户的访问实现细粒度的逻辑,其中有不同的考虑与不同的应用程序领域和不同类型的功能相关。 由于典型访问控制要求的复杂性,此机制经常导致安全漏洞,从而使攻击者能够未经授权访问数据和功能。

处理用户输入

所有用户输入都是不可信的 ”。 针对Web应用程序的大多数攻击都涉及提交输入,这些输入被设计为导致应用程序设计者不希望的行为。 对应用程序安全性的关键要求是,应用程序必须以安全的方式处理用户输入。 针对基于输入的漏洞的必要防御措施是“输入验证”,这意味着必须验证,过滤和转换来自客户端的所有输入,以确保服务器接收的输入始终是安全的。 但是并不总是可能限制所有可疑的输入。 在某些情况下,应用程序需要从用户那里获取代码示例或HTML标记(例如stackOverflow.com)。 为了处理用户输入,根据输入的情况和类型考虑各种方法。 有时需要结合使用几种方法。 这些方法是:

  • 拒绝已知错误:此方法使用黑名单,其中包含一组已知用于攻击的文字字符串或模式。 验证机制会阻止与黑名单匹配的所有数据,并允许其他所有内容。 由于开发技术不断发展,因此这是最无效的方法。
  • 接受已知的好消息:此方法使用白名单,其中包含set(如果是原义的字符串或模式),已知该字符串或模式仅匹配所需的输入。 验证机制仅允许与白名单匹配的数据,并阻止其他所有数据。
  • 消毒:有时应用程序需要接受无法保证安全的数据。 应用程序不会拒绝此输入,而是以各种方式对其进行清理,以防止其产生任何不利影响。 在进一步处理之前,可能会编码或转义潜在有害字符。
  • 安全的数据处理:如果以不安全的方式处理用户提供的数据,则可能会出现漏洞。 可以通过不验证输入本身而避免漏洞,而是通过确保对输入执行的处理本质上是安全的来避免的。 例如,可以通过正确使用参数化查询进行数据库访问来防止SQL注入攻击。
  • 语义检查:有时,攻击者提供的输入与普通的非恶意用户可能提交的输入相同。 造成恶意的是在不同情况下进行提交。 例如,攻击者可以通过更改以隐藏形式字段发送的帐号来访问另一个用户的银行帐户。 语法验证的数量不会区分用户的数据和攻击者的数据。 为了防止未经授权的访问,应用程序需要验证提交的帐号应属于提交帐号。

处理攻击者

对于安全性非常重要的应用程序设计者,必须假设该应用程序将受到专门和熟练的攻击者的攻击。 应用程序的关键功能是以控制器的方式处理这些攻击者并对其做出反应。 这些机制包括旨在挫败攻击者的进攻和防御措施。 为应对攻击者而采取的措施通常包括以下任务:

  • 处理错误:应用程序应以适当的方式处理意外错误,并应从错误情况中恢复并显示适当的错误消息。 应用程序不应在其响应中返回任何系统生成的消息或其他调试信息。
  • 维护审核日志:对于应用程序中发生的所有事件,应保留一个审核日志,其中的日志主要用于调查针对应用程序的入侵尝试。
  • 提醒管理员:在许多情况下,需要立即采取措施以应对尝试的攻击。 例如,管理员可以阻止攻击者正在使用的IP地址。 警报机制应得到良好开发,以创建真正的警报。
  • 对攻击作出反应应用程序可以识别可疑的攻击,并可以通过缓慢响应来终止攻击者的会话,从而对攻击者造成挫败。 这不是解决漏洞的替代选择,但是可以最大程度地减少攻击的影响。