客户端验证

在本章中,我们将了解验证如何帮助 Python 渗透测试。

验证的主要目标是测试并确保用户提供了成功完成操作所需的必要且格式正确的信息。

有两种不同类型的验证 −

  • 客户端验证(Web 浏览器)
  • 服务器端验证

服务器端验证和客户端验证

在回发会话期间在服务器端进行的用户输入验证称为服务器端验证。PHP 和 ASP.Net 等语言使用服务器端验证。服务器端的验证过程结束后,通过生成新的动态网页将反馈发送回客户端。借助服务器端验证,我们可以防范恶意用户。

另一方面,在客户端进行的用户输入验证称为客户端验证。JavaScript 和 VBScript 等脚本语言用于客户端验证。在这种验证中,所有用户输入验证仅在用户浏览器中完成。它不像服务器端验证那么安全,因为黑客可以轻松绕过我们的客户端脚本语言并向服务器提交危险输入。

篡改客户端参数:验证绕过

HTTP 协议中的参数传递可以借助 POST 和 GET 方法完成。GET 用于从指定资源请求数据,POST 用于将数据发送到服务器以创建或更新资源。这两种方法之间的一个主要区别是,如果网站使用 GET 方法,则传递的参数会显示在 URL 中,我们可以更改此参数并将其传递给 Web 服务器。例如,查询字符串(名称/值对)在 GET 请求的 URL 中发送:/test/hello_form.php?name1 = value1&name2 = value2。另一方面,使用 POST 方法时不显示参数。使用 POST 发送到服务器的数据存储在 HTTP 请求的请求正文中。例如,POST /test/hello_form.php HTTP/1.1 Host: 'URL' name1 = value1&name2 = value2

用于绕过验证的 Python 模块

我们将要使用的 Python 模块是 mechanize。它是一个 Python Web 浏览器,提供在网页中获取 Web 表单的功能,也方便提交输入值。借助 mechanize,我们可以绕过验证并调整客户端参数。但是,在将其导入 Python 脚本之前,我们需要通过执行以下命令来安装它 −

pip install mechanize

示例

以下是一个 Python 脚本,它使用 mechanize 绕过使用 POST 方法传递参数的 Web 表单验证。Web 表单可从链接 https://www.tutorialspoint.com/php/php_validation_example.htm 获取,并可用于您选择的任何虚拟网站。

首先,让我们导入 mechanize 浏览器 −

import mechanize

现在,我们将创建一个名为 brwsr 的 mechanize 浏览器对象 −

brwsr = mechanize.Browser()

下一行代码显示用户代理不是机器人。

brwsr.set_handle_robots( False )

现在,我们需要提供包含需要绕过验证的 Web 表单的虚拟网站的 URL。

url = input("输入 URL ")

现在,以下几行将设置一些父级为 true。

brwsr.set_handle_equiv(True)
brwsr.set_handle_gzip(True)
brwsr.set_handle_redirect(True)
brwsr.set_handle_referer(True)

接下来,它将打开网页并在该页面上打印网页表单。

brwsr.open(url)
for form in brwsr.forms():
print form

下一行代码将绕过给定字段的验证。

brwsr.select_form(nr = 0)
brwsr.form['name'] = ''
brwsr.form['gender'] = ''
brwsr.submit()

脚本的最后一部分可以根据我们想要绕过验证的 Web 表单字段进行更改。在上面的脚本中,我们采用了两个字段 - "name""gender",它们不能留空(您可以在 Web 表单的编码中看到),但此脚本将绕过该验证。