客戶端驗證



本章我們將學習驗證如何在Python滲透測試中提供幫助。

驗證的主要目標是測試並確保使用者已提供完成操作所需必要的且格式正確的資料。

驗證主要分為兩種型別:

  • 客戶端驗證(網頁瀏覽器)
  • 伺服器端驗證

伺服器端驗證 & 客戶端驗證

在回發會話期間伺服器端進行的使用者輸入驗證稱為伺服器端驗證。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://tutorialspoint.tw/php/php_validation_example.htm獲取,並可用於您選擇的任何虛擬網站。

首先,讓我們匯入mechanize瀏覽器:

import mechanize

現在,我們將建立一個名為brwsr的mechanize瀏覽器物件:

brwsr = mechanize.Browser()

下一行程式碼表明使用者代理不是機器人。

brwsr.set_handle_robots( False )

現在,我們需要提供包含我們需要繞過驗證的Web表單的虛擬網站的URL。

url = input("Enter URL ")

接下來幾行程式碼將設定一些引數為真。

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

接下來它將開啟網頁並在該頁面上列印Web表單。

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表單的程式碼中看到),但此指令碼將繞過該驗證。

廣告