由于Web应用程序中存储了大量数据以及Web上事务数量的增加,因此对Web应用程序进行适当的安全测试正变得越来越重要。
在本教程中,我们将对网站安全测试中使用的含义,工具和关键术语及其测试方法进行详细研究。
安全测试是一个检查机密数据是否保持机密的过程(即,它不会暴露给其目的的个人/实体),并且用户只能执行他们有权执行的任务。
例如, 用户不应能够拒绝其他用户使用网站的功能,或者用户不应能够以意外方式更改Web应用程序的功能等。
在我们继续之前,熟悉一些在Web应用程序安全测试中经常使用的术语将是有用的。
什么是“漏洞”?
这是 Web 应用程序中的一个弱点。这种“弱点”的原因可能是由于应用程序中的错误,注入(SQL /脚本代码)或病毒的存在。
什么是“网址操作”?
某些 Web 应用程序在 URL 中的客户端(浏览器)和服务器之间传递其他信息。更改 URL 中的某些信息有时可能会导致服务器出现意外行为,这称为 URL 操作。
什么是“SQL注入”?
这是通过 Web 应用程序用户界面将 SQL 语句插入到某个查询中的过程,然后由服务器执行该查询。
什么是“XSS(跨站点脚本)”?
当用户在 Web 应用程序的用户界面中插入 HTML/客户端脚本时,此插入对其他用户可见,它被称为 XSS。
什么是“欺骗”?
欺骗是创建恶作剧外观相似的网站和电子邮件。
为了对Web应用程序执行有用的安全测试,安全测试人员应该对HTTP协议有很好的了解。了解客户端(浏览器)和服务器如何使用HTTP进行通信非常重要。
此外,测试人员至少应该知道SQL注入和XSS的基础知识。
希望 Web 应用程序中存在的安全缺陷数量不会很高。但是,能够准确描述所有安全缺陷以及所有必需的详细信息肯定会有所帮助。
Web应用程序的安全测试可以通过“密码破解”来启动。为了登录到应用程序的私有区域,可以猜测用户名/密码或使用一些密码破解工具。常见的用户名和密码列表以及开源密码破解程序都可用。
如果 Web 应用程序不强制执行复杂的密码(例如, 使用字母、数字和特殊字符或至少具有所需字符数),则破解用户名和密码可能不需要很长时间。
如果用户名或密码存储在 Cookie 中而未加密,则攻击者可以使用不同的方法来窃取 Cookie 以及存储在 Cookie 中的信息,如用户名和密码。
测试人员应检查应用程序是否传递查询字符串中的重要信息。当应用程序使用 HTTP GET 方法在客户端和服务器之间传递信息时,会发生这种情况。
信息通过查询字符串中的参数传递。测试人员可以修改查询字符串中的参数值,以检查服务器是否接受它。
通过HTTP GET请求将用户信息传递到服务器进行身份验证或获取数据。攻击者可以操纵从此 GET 请求传递到服务器的每个输入变量,以获取所需信息或损坏数据。在这种情况下,应用程序或Web服务器的任何异常行为都是攻击者进入应用程序的大门。
应该检查的下一个因素是SQL注入。在任何文本框中输入单引号 (') 应被应用程序拒绝。相反,如果测试人员遇到数据库错误,则意味着用户输入入到某个查询中,然后由应用程序执行。在这种情况下,应用程序容易受到 SQL 注入的攻击。
SQL注入攻击非常关键,因为攻击者可以从服务器数据库获取重要信息。要检查Web应用程序中的SQL注入入口点,请从代码库中找出代码,其中通过接受一些用户输入在数据库上执行直接MySQL查询。
如果在 SQL 查询中精心构造用户输入数据以查询数据库,则攻击者可以将 SQL 语句或部分 SQL 语句作为用户输入注入,以从数据库中提取重要信息。
即使攻击者成功使应用程序崩溃,从浏览器上显示的SQL查询错误中,攻击者也可以获得他们正在寻找的信息。在这种情况下,应正确处理/转义用户输入中的特殊字符。
测试人员还应检查Web应用程序的XSS(跨站点脚本)。任何 HTML 例如, < HTML> 或任何脚本 例如,
攻击者可以使用此方法在受害者的浏览器上执行恶意脚本或 URL。使用跨站点脚本,攻击者可以使用 JavaScript 等脚本来窃取用户 Cookie 和存储在 Cookie 中的信息。
许多 Web 应用程序获取一些有用的信息,并将此信息传递给来自不同页面的一些变量。
例如, http://www.examplesite.com/index.php?userid=123&query=xyz
攻击者可以很容易地将一些恶意输入或<script>
作为“&query”
参数传递,该参数可以浏览浏览器上重要的用户/服务器数据。
重要: 在安全测试期间,测试人员应非常小心,不应修改以下任何内容:
此外,应避免在生产系统中进行安全测试。