Walidacja po stronie klienta

W tym rozdziale dowiemy się, w jaki sposób walidacja pomaga w pentestingu w Pythonie.

Głównym celem walidacji jest sprawdzenie i upewnienie się, że użytkownik dostarczył niezbędne i odpowiednio sformatowane informacje potrzebne do pomyślnego zakończenia operacji.

Istnieją dwa różne typy walidacji -

  • walidacja po stronie klienta (przeglądarka internetowa)
  • walidacja po stronie serwera

Walidacja po stronie serwera i walidacja po stronie klienta

Wywoływane jest sprawdzanie poprawności danych wejściowych użytkownika, które ma miejsce po stronie serwera podczas sesji po zwrotnej server-side validation. Języki takie jak PHP i ASP.Net używają walidacji po stronie serwera. Po zakończeniu procesu walidacji po stronie serwera informacje zwrotne są przesyłane z powrotem do klienta poprzez wygenerowanie nowej i dynamicznej strony internetowej. Za pomocą walidacji po stronie serwera możemy uzyskać ochronę przed złośliwymi użytkownikami.

Z drugiej strony walidacja danych wejściowych użytkownika, która ma miejsce po stronie klienta, nazywana jest walidacją po stronie klienta. Języki skryptowe, takie jak JavaScript i VBScript, są używane doclient-side validation. W tego rodzaju walidacji cała weryfikacja danych wejściowych użytkownika jest wykonywana tylko w przeglądarce użytkownika. Nie jest tak bezpieczna jak walidacja po stronie serwera, ponieważ haker może łatwo ominąć nasz język skryptowy po stronie klienta i przesłać niebezpieczne dane wejściowe do serwera.

Odpuszczanie parametru po stronie klienta: pomijanie walidacji

Do przekazywania parametrów w protokole HTTP służą metody POST i GET. GET służy do żądania danych z określonego zasobu, a POST służy do wysyłania danych do serwera w celu utworzenia lub zaktualizowania zasobu. Jedną z głównych różnic między obiema metodami jest to, że jeśli witryna korzysta z metody GET, parametry przekazujące są wyświetlane w adresie URL i możemy zmienić ten parametr i przekazać go do serwera WWW. Na przykład ciąg zapytania (pary nazwa / wartość) jest wysyłany w adresie URL żądania GET:/test/hello_form.php?name1 = value1&name2 = value2. Z drugiej strony parametry nie są wyświetlane podczas korzystania z metody POST. Dane przesłane do serwera za pomocą POST są przechowywane w treści żądania HTTP. Na przykład POST/test/hello_form.php HTTP/1.1 Host: ‘URL’ name1 = value1&name2 = value2.

Moduł Pythona do obejścia walidacji

Moduł Pythona, którego będziemy używać, to mechanize. Jest to przeglądarka internetowa w języku Python, która zapewnia możliwość uzyskiwania formularzy internetowych na stronie internetowej, a także ułatwia wprowadzanie wartości wejściowych. Za pomocą mechanizacji możemy ominąć walidację i złagodzić parametry po stronie klienta. Jednak przed zaimportowaniem go do naszego skryptu Pythona musimy go zainstalować, wykonując następujące polecenie -

pip install mechanize

Przykład

Poniżej znajduje się skrypt w Pythonie, który używa mechanize do ominięcia walidacji formularza internetowego przy użyciu metody POST do przekazania parametru. Formularz internetowy można pobrać z linkuhttps://www.tutorialspoint.com/php/php_validation_example.htm i może być używany w dowolnej wybranej przez Ciebie fikcyjnej witrynie internetowej.

Na początek zaimportujmy przeglądarkę mechanize -

import mechanize

Teraz utworzymy obiekt o nazwie brwsr przeglądarki mechanize -

brwsr = mechanize.Browser()

Następny wiersz kodu pokazuje, że agent użytkownika nie jest robotem.

brwsr.set_handle_robots( False )

Teraz musimy podać adres URL naszej fałszywej witryny zawierającej formularz internetowy, na którym musimy ominąć walidację.

url = input("Enter URL ")

Teraz kolejne wiersze ustawią niektórych rodziców na true.

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

Następnie otworzy stronę internetową i wydrukuje formularz internetowy na tej stronie.

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

Kolejna linia kodów pominie walidacje na podanych polach.

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

Ostatnią część skryptu można zmienić zgodnie z polami formularza internetowego, na których chcemy ominąć walidację. Tutaj w powyższym skrypcie wzięliśmy dwa pola -‘name’ i ‘gender’ które nie mogą być puste (możesz zobaczyć w kodzie formularza internetowego), ale ten skrypt ominie tę walidację.