# Web应用程序安全测试

![](https://2165487371-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfahSMMYUzmqmE8SfCaax%2Fuploads%2Fgit-blob-2432a603eb1415842bcf49b66138c1dd25e6efed%2Fweb-app-security-graphic%20\(1\).svg?alt=media)

## 什么是Web应用安全测试？

Web应用安全测试的目的是确定一个Web应用程序是否容易受到攻击。它涵盖了多种不同方法的自动化和手动技术。

### Web应用无处不在

多年前，当桌面应用程序仍然是时代的主流时，Web应用程序比现在要少得多。从技术上讲，任何通过Web浏览器访问的客户端-服务器程序都是一个**Web应用程序**，如今它包括了互联网的绝大多数。Web应用程序在许多方面更加灵活。

从简单的联系表格和电子商务结账，一直到社交媒体平台和网上银行系统。如果你通过浏览器访问它，那么它就是一个Web应用程序。一个Web应用程序可以构成一个网站的一小部分，或者它本身就是一个网站。

### 每个人都面临着数据泄露的风险

所有Web应用程序都有一个共同点，那就是它们处理数据（一种有价值的商品）。和任何商品一样，数据也有存储风险。存在着想要窃取数据的组织，无论是出于监视的目的，还是为了实施欺诈，或仅仅是为了出售。

这意味着Web应用程序安全至关重要。但在现实世界中，确保一个Web应用程序的安全并不是一件容易的事。首先，构建Web应用程序的开发人员往往不是安全专家。并且新的安全漏洞不断被发现，因此很难跟上。

### 进入：Web应用安全测试

解决方案是测试你的Web应用程序，以了解其弱点所在。用银行保险库来比喻，你首先要确保它的设计是正确的。然后你可能会聘请一个专家团队来尝试闯入它。随着时间的推移和新的弱点被发现，你会相应地改进保险库。

你将在下文中看到，这与Web应用程序安全测试并没有太大的不同。现在“保险库”的墙是代码，涉及的许多（但不是全部）参与者都是自动化的，但理论是相同的。构建强大的系统并保持其强大，尽可能测试每一种攻击方法。

## Web应用安全测试的类型

Web应用安全测试中有各种概念。其中最著名的包括：

### 动态应用程序安全测试（DAST）

DAST在一个正在运行的应用程序上由外向内地工作。就好比让一个专家团队试图为你闯入你的银行保险库。这就是所谓的**黑盒**安全测试技术，因为Web应用程序背后运行的代码对测试来说是不可见的。DAST模拟了真实的攻击，Burp Suite在很大程度上是由DAST方法演变而来的。

由于DAST是一种切实有效的技术，模拟对正在运行的Web应用程序进行真实攻击，因此其结果通常可以被认为是正确的。在所有条件相同的情况下，DAST往往会比SAST产生更少的误报。

### 静态应用程序安全测试（SAST）

SAST或多或少与DAST相反。它从内向外地处理静态代码。一个很好的比喻就是让一个专家查看银行保险库的设计图纸，以寻找缺陷。这被称为**白盒**安全测试技术，因为测试可以看到Web应用程序的全部代码（与大多数真实攻击者不同）。

不幸的是，由于SAST运作在理论层面，而不是在实际层面，因此它很容易出现误报。然后就需要人工调查，需要花费时间和金钱。而且，就像那个“狼来了”的故事一样，SAST的性质可能会导致它的警告在现实场景中被用户忽视。

### 交互式应用程序安全测试（IAST）

IAST修改一个正在运行的应用程序，以便发现漏洞。这很像在你的银行保险库内放置传感器，以查看你的DAST攻击产生的影响。这被称为**灰盒**安全测试技术，实际上是黑盒和白盒方法的混合。它可以看到仅使用DAST会**不可见**的漏洞。

由于其侵入性，IAST不应被用于生产系统。这就限制了它在测试环境中的应用。这也是OAST可以被认为是**世界上最好的**安全测试技术的一个原因。

### 带外应用程序安全测试（OAST）

OAST是[PortSwigger首创](https://portswigger.net/blog/oast-out-of-band-application-security-testing)的一项技术。正如我们所知，由于DAST只能在外部产生可见差异的情况下才能看到漏洞，因此它有可能错过**不可见**的漏洞。OAST解决了这个问题，同时几乎没有误报，并且也不需要修改应用程序。

因此OAST具有上述三种技术的许多优点，同时最大限度地减少了它们的缺点。与SAST和IAST一样，它可以看到DAST无法看到的漏洞，但它不像SAST那样容易产生误报。而且，尽管IAST是一种侵入性的使用方法，但OAST不会做这样的改变，因此它更安全。

## Web应用程序安全测试的不同用途

正如我们已经看到的，如今几乎每一个网站都是一个Web应用。但不同的情况会伴随着不同的安全测试挑战。

### 测试各类Web技术

Web应用程序本身有多种不同的类型。其中包括移动应用程序、单页应用程序（SPA）和渐进式Web应用程序（PWA）。每种类型都有一套明确的安全测试要求。例如，SPA大量使用JavaScript，这对自动化扫描工具来说是出了名的难以处理。

### 保持合规

某些行业也有他们自己非常特殊的需求。例如，金融和电子商务行业由于掌握的客户数据量很大，会受到网络安全合规标准的严格监管。这使得安全测试至关重要。

### 大规模自动化

使用安全测试的组织规模也会影响其所选择的解决方案。当然，在企业层面，单个产品组合中可能包含成千上万的Web应用程序，自动化是至关重要的。但是自动化漏洞扫描器无法像人一样发挥创造力，因此应始终进行手动渗透测试。

### 渗透测试

渗透测试人员是能够模拟对你的“保险库”进行攻击以改进它的专家。渗透测试本身属于道德黑客的更大范畴。道德黑客还包括漏洞赏金猎人，如果有人提供赏金，他们将会竞相寻找Web应用程序中的安全漏洞。发起这种活动的一种方式是通过像HackerOne这样的计划。

### 安全开发

正如我们前面所谈到的，确保银行保险库安全的一个首要因素是确保它在一开始就建造得很好。传统上，Web应用程序的安全被推迟到开发结束后，这不仅造成了延误，还可能耗费大量资金。简而言之，很难在开发软件的同时考虑安全问题。

但自动化安全测试的力量允许采用DevSecOps方法。DevSecOps使开发人员能够编写安全的代码。由于安全是内建的，而不是在最后才添加的，因此应用程序在发布之日就会更安全。最好的DevSecOps解决方案甚至可以教育使用它们的开发者，这意味着首要修复的Bug更少。
