Web应用程序中的常见安全漏洞

在讨论如何在应用程序中应用安全性之前,您应该首先了解如何保护应用程序 。为了进行恶意操作,攻击者会识别并利用应用程序的漏洞 。我们经常将漏洞描述为一种弱点,它可以允许执行不需要的操作,通常带有恶意意图 。
了解漏洞的一个很好的起点就是了解开放Web应用程序安全项目,也称为 OWASP(https://www.owasp.org) 。在 OWASP上,您将找到应该在应用程序中避免的最常见漏洞的描述 。在进入下一章之前,让我们花几分钟时间进行理论上的讨论,然后从下一章开始应用 Spring Security 的概念 。在应注意的常见漏洞中,您会发现以下这些:

  • Broken authentication
  • Session fixation
  • Cross-site scripting (XSS)
  • Cross-site request forgery (CSRF)
  • Injections
  • Sensitive data exposure
  • Lack of method access control
  • Using dependencies with known vulnerabilities
这些项与应用程序级安全性相关,而且其中大多数也与使用 Spring Security 直接相关 。我们将在本书中详细讨论它们与 Spring Security 的关系,以及如何保护您的应用程序不受这些问题的影响,但首先是一个概述 。
身份验证和授权中的漏洞我们将深入讨论身份验证和授权,并且您将学习使用Spring Security实施身份验证和授权的几种方法 。身份验证表示应用程序识别尝试使用它的人的过程 。当某人或某物使用该应用程序时,我们希望找到其身份,以便授予或不授予进一步的访问权限 。在现实世界中的应用中,您还会发现匿名访问的情况,但在大多数情况下,只有在被识别后,用户才能使用数据或执行特定操作 。获得用户身份后,我们就可以处理授权 。
授权是确定经过身份验证的调用方是否具有使用特定功能和数据的特权的过程 。例如,在移动银行应用程序中,大多数经过身份验证的用户都可以转账,但只能从其帐户中转账 。
我们可以说,如果一个有不良意图的人以某种方式获得对不属于他们的功能或数据的访问权,我们的授权将被破坏 。诸如 Spring Security 之类的框架有助于降低此漏洞的可能性,但如果使用不当,仍然有可能发生这种情况 。例如,您将使用 Spring Security 为具有特定角色的经过身份验证的个人定义对特定端点的访问 。如果数据级别没有限制,那么有人可能会找到一种使用属于另一个用户的数据的方法 。
请看图1.5 。经过身份验证的用户可以访问 /products/{name} 端点 。在浏览器中,web应用程序调用这个端点来从数据库中检索并显示用户的产品 。但是,如果应用程序在返回这些产品时没有验证这些产品属于谁,会发生什么呢?一些用户可以找到一种方法来获取另一个用户的详细信息 。这种情况只是应用程序设计一开始就应该考虑的示例之一,这样您就可以避免这种情况 。
Web应用程序中的常见安全漏洞

文章插图
图 1.5
登录的用户可以看到他们的产品 。如果应用服务器只检查用户是否登录,那么用户可以调用相同的端点来检索其他用户的产品 。这样,John就能够看到属于Bill的数据 。导致此问题的问题是应用程序没有为数据检索对用户进行身份验证 。
在整个系列中,我们都会提到漏洞 。我们将在后面从身份验证和授权的基本配置开始讨论漏洞 。然后,我们将讨论漏洞如何与 Spring Security 和 Spring Data 的集成相关,以及如何设计一个应用程序来避免这些漏洞,使用 OAuth 2 。
什么是会话固定?会话固定漏洞是 web 应用程序的一个更具体、更严重的弱点 。如果存在,则允许攻击者通过重用以前生成的会话 ID 来模拟有效用户 。如果在身份验证过程中,web 应用程序没有分配唯一的会话 ID,就会发生此漏洞 。这可能会导致重用现有的会话 id 。利用这个漏洞包括获取一个有效的会话 ID,并让目标受害者的浏览器使用它 。
根据您实施Web应用程序的方式,个人可以使用多种方法来使用此漏洞 。例如,如果应用程序在URL中提供了会话ID,则可能会诱骗受害者单击恶意链接 。如果应用程序使用隐藏属性,则攻击者可以使受害者欺骗并使用外部表单,然后将操作发布到服务器 。如果应用程序将会话的值存储在cookie中,则攻击者可以注入脚本并强制受害者的浏览器执行该脚本 。
什么是跨站点脚本(XSS)?跨站点脚本(也称为XSS)允许将客户端脚本注入到服务器公开的Web服务中,从而允许其他用户运行这些脚本 。在使用甚至存储之前,您应该正确地“清理”请求,以避免意外执行外来脚本 。潜在影响可能与帐户模拟(与会话固定结合)或参与分布式攻击(如DDoS)有关 。


推荐阅读