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ę.