所有文章 > 技术杂货铺 > Web 应用程序安全检查表:10 项改进
Web 应用程序安全检查表:10 项改进

Web 应用程序安全检查表:10 项改进

不能低估 Web 应用程序中安全性的重要性。在当今的数字时代,Web 应用程序在我们的个人和职业生活中发挥着核心作用。无论好坏,这些应用程序都是我们与世界日常互动不可或缺的一部分。大多数人和组织最大的担忧之一是这些应用程序如 何存储和处理我们最敏感的数据。这些数据包括财务数据、个人信息和其他用户希望安全的机密信息。因此,Web 应用程序必须保持安全,并且没有攻击者可能利用的漏洞。 

在本文中,我们将讨论保护 Web 应用程序安全的关键注意事项。为了使其尽可能有针对性,我们将提供十项改进的清单,这些改进可帮助确保 Web 应用程序的安全。通过遵循这些最佳实践并采取主动的 Web 应用程序安全方法,您可以保护用户的数据并确保 Web 应用程序的完整性。

Web 应用程序安全检查表

保护 Web 应用程序需要定期审查和改进现有的安全措施。尽管 Web 安全性和漏洞在不断变化,但以下做法是永恒的,应始终实施和应用。以下是构建和保护 Web 应用程序时要检查的事项列表。在每一点中,我们也一定会提到如何实施每条建议以及实施后可以解决哪些漏洞。有了这些,让我们开始吧。

1. 输入验证

我们要实施的第一个安全措施是输入验证。通过清理和验证用户输入,您可以防止注入攻击和跨站点脚本。这些类型的漏洞允许攻击者执行任意代码并可能访问敏感数据。这些类型的攻击很容易执行,但也很容易被阻止。

确保输入验证连贯性的最佳方法是在应用程序的前端和后端(服务器)实施措施。如果您只能在一个地方实施它,请始终确保后端输入经过验证和清理。清理用户输入涉及从用户输入中删除潜在的有害字符或数据。验证用户输入涉及确保输入符合某些标准,例如采用正确的格式或在一定范围内。

许多框架和语言都提供了工具,允许用户在其代码中轻松实现这一点。例如,如果您在代码中构建查询字符串,只需获取用户输入并将其推送到查询中,这非常不安全,并且很容易让您受到 SQL 注入攻击。更好的方法可能是使用参数化查询、调用存储过程或使用 ORM 解决方案来访问和操作数据。

2. 身份验证和访问控制

确保您的应用程序只能由授权用户访问是我们列表中的第二项改进。通过确保用户有权访问,我们可以成倍地减少潜在黑客可以利用的漏洞数量。更进一步,您可能还希望实施访问控制,以便用户只能访问他们需要的数据和服务,仅此而已。 

作为身份验证实施的一部分,实施安全的密码存储至关重要。如果攻击者可以轻松获得密码,那么进入应用程序就不再是障碍。为了进一步保护用户和您的应用程序,多因素身份验证也应包含在您的身份验证措施中。多因素身份验证 (MFA) 通过在身份验证过程中强制执行另一个步骤来帮助防止未经授权访问您的 Web 应用程序。一种常见的方法是通过短信或电子邮件将登录代码发送到受信任的设备,以确保用户完全通过身份验证。 

实现出色的身份验证和访问控制标准的两种最佳方法是:

  • 使用安全哈希算法存储密码
  • 要求定期更新密码
  • 实施身份验证方法,例如双因素 (2FA) 和生物特征身份验证

许多不同的服务和框架都包含确保可以轻松实现身份验证、授权和访问控制标准的机制。

3. 使用 HTTPS 和 TLS 加密

我们的下一个建议是确保您的应用程序使用 HTTPS 和 TLS 加密来保护。这种 Web 应用程序访问方法已成为一种标准,即使对于不处理安全数据或交易的应用程序也是如此。许多客户希望所有网站都是安全的,尤其是处理敏感数据的那些网站。

HTTPS 代表超文本传输​​协议安全,是标准 HTTP 协议的更安全扩展。HTTPS 使用传输层安全性 (TLS) 或其前身安全套接字层 (SSL) 在 Web 服务器和客户端浏览器之间建立加密连接。

通过使用 HTTPS 协议,您可以确保您的应用程序被安全地访问。部分方法是限制通过 HTTP 访问您的应用程序,只允许通过 HTTPS 访问。如果 HTTPS 连接出现问题,许多浏览器都会让用户知道该网站可能不安全,这有助于告知用户在安全问题得到解决之前要谨慎甚至避免访问该网站。

通过实施 HTTPS 和适当的证书管理,您可以保护传输中的数据免受中间人攻击和拦截。这些类型的攻击很容易通过不安全的连接和网络执行,可以通过使用 HTTPS 来限制。许多托管解决方案使用上述原则,让您能够轻松地通过安全连接部署和维护应用程序。

4.跨域资源共享(CORS)

确保您的服务和资源仅由受信任的域访问是另一种减少潜在漏洞的简单方法。创建 CORS 策略可让您的应用程序根据流量来源确定要阻止哪些流量以及允许哪些流量进入​​。

正确的 CORS 标头可以允许或拒绝其他域对资源的访问。这有助于防止跨站点请求伪造和跨站点脚本攻击。通过正确配置 CORS 标头,您可以将对 Web 应用程序资源的访问限制在受信任的域,并降低此类攻击的风险。

许多框架都直接内置了 CORS 功能,因此开箱即用,并且配置起来非常容易。例如,在 Spring Boot 中,我们可以像这样设置 CORS 策略:

@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("https://example.com")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}

此示例配置规定了以下内容: 

  • 允许使用任何 HTTP 方法GETPOSTPUTDELETEOPTIONS从https://example.com访问所有资源。 
  • 允许的标头的*值表示请求中允许任何标头。 
  • allowCredentials设置设为true,允许在请求中发送凭据。 
  • maxAge值为3600表示预检响应最多可以缓存一小时

即使使用像上面这样的简单配置也可以为您的应用程序增加大量安全性。如上所述,许多其他框架都有类似的配置选项可用。

5.渗透测试

我们的第五个建议是将渗透测试作为应用程序安全措施的一部分。渗透测试是一种通过模拟网络攻击来测试应用程序安全性的方法。您可以使用它来识别攻击者可能利用的 Web 应用程序安全性漏洞和弱点。

为了进行渗透测试,安全专家团队使用专门的工具和技术尝试获取对 Web 应用程序及其数据的未经授权的访问权限。然后,他们使用测试结果来识别和修复任何漏洞。

渗透测试有三种类型:白盒、黑盒和灰盒。让我们更深入地了解每种类型。 

白盒渗透测试

白盒渗透测试涉及与测试人员共享完整的网络和系统信息,包括网络地图和凭证。测试团队将获得尽可能多的信息,以节省时间并降低总体参与成本。白盒渗透测试非常适合模拟有针对性的攻击,同时利用尽可能多的攻击媒介。

黑盒渗透测试

在黑盒渗透测试中,测试人员根本不会得到任何信息。这通常是最昂贵和最耗时的选项,在这种情况下,渗透测试人员会遵循非特权攻击者的方法,从最初的访问和执行到利用。在大多数情况下,攻击者会这样操作,而不了解系统的内部工作原理。由于这种测试的性质,可能会错过潜在的漏洞,并且很大程度上取决于执行测试的测试人员的技能。

灰盒渗透测试

在灰盒渗透测试中,测试人员只能获得有限的信息。通常,这些信息以登录凭据或其他机制的形式提供,用于在不强制的情况下访问系统。灰盒测试可以帮助组织了解特权用户可以获得的访问级别以及他们可能造成的潜在损害。这可以帮助组织实施正确的控制措施,以减轻攻击者获得应用程序访问权限后造成的损害。

采用上述任何一种渗透测试技术都是对您 Web 应用程序安全实践的极大补充。有许多不同的公司和工具可满足您的渗透测试需求。

6. 采用 DevSecOps 方法

DevSecOps 方法涉及将安全专家引入开发过程。这些专家在软件开发生命周期的每个阶段将安全测试集成到开发和运营过程中。这些工作中的大部分包括自动化安全控制,特别是在用于构建应用程序的 CI/CD 管道中。DevSecOps 旨在从一开始就将安全性融入 Web 应用程序中,而不是事后才添加。

DevSecOps 使用预防措施来防止注入攻击、跨站点脚本和敏感数据泄露,以避免引入漏洞。DevSecOps 工作流中可以使用许多不同的工具。DevSecOps 工具的示例包括:

  • SAST(静态应用程序安全测试)工具
  • DAST(动态应用安全测试)工具
  • 容器安全工具
  • 基础设施即代码 (IaC) 安全工具
  • 漏洞管理工具
  • 机密管理工具

通过使用上述工具,可以在构建和维护 Web 应用时增加高度的自动化和安全性。这些工具涵盖从扫描代码和应用程​​序的漏洞到确保部署代码的基础设施安全的所有内容。

7. 安全配置和部署实践

正确配置和部署 Web 应用程序对于维护其安全性至关重要。这包括在设置 Web 服务器、保护数据库和实施安全编码实践时遵循最佳实践。

其中一个重要因素是确保您的组织和团队拥有正确的技能来处理应用程序的安全部署。这还将涉及确保部署清单和将要执行的步骤是协调一致的。每个步骤都应考虑到安全最佳实践。

确保服务器和数据库配置正确设置也很重要。确保服务器得到强化并且不容易被不良行为者访问,这一点不容忽视,最好将其作为部署清单的一部分进行审核。这对于存储静态敏感数据的数据库服务器来说极其重要。

许多服务器和 CI/CD 管道都内置了采用最佳实践的功能。请务必研究并遵循这些产品供应商提供的文档中概述的推荐安全配置。

8. OWASP 应用程序安全检查表

遵循 OWASP 的全面安全措施列表可提高 Web 应用程序的安全性并防范潜在威胁。此清单涵盖了 Web 应用程序的各种安全措施,包括身份验证和访问控制、输入验证、错误处理和加密。通过遵循此清单,开发人员可以确保他们实施最新、最有效的安全措施。

虽然本分类涵盖了许多主题,但让项目中的所有技术参与者了解 OWASP 应用程序安全检查表是一种很好的做法。作为其中的一部分,在代码和部署审查期间,应使用检查表作为参考,以确保实施最佳实践。

9. 遵循正确的记录规范

监控和记录 Web 应用程序上的活动有助于识别潜在的安全威胁,并在发生安全漏洞时为取证调查提供有价值的信息。通过保留每个应用程序事件的详细日志,可以轻松追踪攻击者的步骤并防止漏洞在未来被利用。

正确的日志记录做法还可确保外部攻击者无法轻易获取日志。正如内部调查人员可以使用日志来确定入侵是如何发生的一样,攻击者也可以使用日志中的数据来策划攻击或发现漏洞。

当数据被推送到日志时,您应确保任何敏感数据都被屏蔽或不包含在日志语句中。信用卡号、密码和其他敏感数据等数据绝不应在未经屏蔽的情况下进入日志文件。如果攻击者获得包含此类数据的日志的访问权限,其危害可能与他们获得应用程序本身的访问权限一样大。

最后,您还应确保打印到控制台或响应的调试日志语句不会被推送到生产代码中。它们涉及JavaScript 文件中的console.log之类的简单内容,这可能会暴露攻击者可以利用的错误。

10. 使用 Web 应用程序防火墙 (WAF)

实施 Web 应用程序防火墙 (WAF) 有助于保护您的 Web 应用程序免受常见的 Web 攻击。正确配置的 WAF 可以轻松抵御跨站点脚本、SQL 注入和拒绝服务攻击等漏洞。WAF 会分析传入应用程序的流量并阻止任何恶意请求。

尽管 WAF 并非是应对所有基于 Web 的漏洞的灵丹妙药,但它相对容易实施,可以作为应用程序传入流量的第一道防线。如果您在云上部署应用程序,许多云提供商都会提供 WAF 作为其堆栈的一部分。对于与您部署应用程序的平台无关的 WAF,您可以使用Cloudflare WAF或Wallarm Cloud WAF,仅举几例。

文章来源:Web Application Security Checklist: 10 Improvements

#你可能也喜欢这些API文章!