Python-penetration-testing-client-side-validation
クライアント側の検証
この章では、Python Pentestingで検証がどのように役立つかを学習します。
検証の主な目的は、ユーザーが操作を正常に完了するために必要な、適切にフォーマットされた情報を提供したことをテストおよび確認することです。
検証には2つの異なるタイプがあります-
- クライアント側の検証(Webブラウザー)
- サーバー側の検証
サーバー側の検証とクライアント側の検証
ポストバックセッション中にサーバー側で行われるユーザー入力検証は、*サーバー側検証*と呼ばれます。 PHPやASP.Netなどの言語は、サーバー側の検証を使用します。 サーバー側の検証プロセスが終了すると、新しい動的なWebページを生成して、フィードバックがクライアントに送信されます。 サーバー側の検証の助けを借りて、悪意のあるユーザーから保護することができます。
一方、クライアント側で行われるユーザー入力検証は、クライアント側検証と呼ばれます。 JavaScriptやVBScriptなどのスクリプト言語は、*クライアント側の検証*に使用されます。 この種類の検証では、すべてのユーザー入力検証はユーザーのブラウザーでのみ行われます。 ハッカーはクライアント側のスクリプト言語を簡単にバイパスして、危険な入力をサーバーに送信できるため、サーバー側の検証ほど安全ではありません。
クライアント側パラメーターの調整:検証バイパス
HTTPプロトコルでパラメーターを渡すには、POSTおよびGETメソッドを使用します。 GETは指定されたリソースからデータを要求するために使用され、POSTはデータをサーバーに送信してリソースを作成または更新するために使用されます。 これら2つの方法の大きな違いの1つは、Webサイトが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ページでWebフォームを取得する機能を提供し、入力値の送信も容易にします。 機械化の助けを借りて、検証をバイパスし、クライアント側のパラメーターを調整できます。 ただし、Pythonスクリプトでインポートする前に、次のコマンドを実行してインストールする必要があります-
pip install mechanize
例
以下はPythonスクリプトで、mechanizeを使用してPOSTメソッドを使用してパラメーターを渡すWebフォームの検証をバイパスします。 Webフォームはリンクlink//php/php_validation_example [https://www.finddevguides.com/php/php_validation_example]から取得でき、任意のダミーWebサイトで使用できます。
まず、機械化ブラウザをインポートしましょう-
import mechanize
ここで、機械化ブラウザの brwsr という名前のオブジェクトを作成します-
brwsr = mechanize.Browser()
次のコード行は、ユーザーエージェントがロボットではないことを示しています。
brwsr.set_handle_robots( False )
次に、検証をバイパスする必要があるWebフォームを含むダミーWebサイトのURLを提供する必要があります。
url = input("Enter URL ")
さて、次の行はいくつかの親をtrueに設定します。
brwsr.set_handle_equiv(True)
brwsr.set_handle_gzip(True)
brwsr.set_handle_redirect(True)
brwsr.set_handle_referer(True)
次に、Webページを開き、そのページに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フォームのフィールドに応じて変更できます。 ここで、上記のスクリプトでは、空白のままにできない(「Webフォームのコーディング」で確認できます)「名前」*と「性別」*の2つのフィールドを取りましたが、このスクリプトはその検証をバイパスします。