Die Sicherheit eurer Website steht an erster Stelle, und eine der grundlegenden Maßnahmen zur Gewährleistung der Sicherheit besteht darin, die von Benutzern eingegebenen Daten sorgfältig zu validieren und zu säubern. In diesem Artikel werden wir uns eingehend mit der Eingabevalidierung befassen und wie ihr diese automatisieren könnt, um eure Website vor potenziell schädlichen Benutzereingaben zu schützen.
Was ist die Eingabevalidierung?
Eingabevalidierung, auch als Säubern von Eingaben bezeichnet, beinhaltet die Überprüfung von Daten, die von Benutzern bereitgestellt werden, auf Einhaltung vordefinierter Regeln. Dieser Prozess ist entscheidend, um sicherzustellen, dass nur Daten akzeptiert und gespeichert werden, die den festgelegten Kriterien entsprechen. Ein klassisches Beispiel hierfür sind E-Mail- und Passworteingaben, bei denen spezifische Regeln gelten, wie das Vorhandensein des „@“-Symbols in einer E-Mail-Adresse oder die Mindestanzahl von Zeichen für ein Passwort.
Automatisierung der Eingabevalidierung
Die Automatisierung der Eingabevalidierung ist ein wichtiger Schritt, um sicherzustellen, dass eure Website immer geschützt ist. Hier sind die Schritte zur Automatisierung:
- Definiert Validierungsregeln: Beginnt damit, klare Regeln für die Validierung eurer Benutzereingaben festzulegen. Überlegt euch, welche Bedingungen erfüllt sein müssen, damit eine Eingabe als gültig betrachtet wird.
- Erstellt Testfälle: Entwickelt Testfälle, die die Validierung Ihrer Eingaben überprüfen. Denkt dabei an verschiedene Szenarien, wie das Testen von ungültigen Zeichen, SQL-Injektionen oder überlangen Eingaben.
- Verwendet ein Test-Framework: Wählt ein geeignetes Test-Framework für eure Anwendung aus. Beliebte Optionen sind Selenium für Webanwendungen oder Appium für mobile Anwendungen.
- Integriert Tests in euren Workflow: Automatisierte Tests zur Validierung von Benutzereingaben sollten integraler Bestandteil eures Entwicklungs- und Bereitstellungsworkflows sein. Diese sollten bei jeder Code-Änderung automatisch ausgeführt werden.
- Überwacht die Ergebnisse: Stellt sicher, dass eure Tests die erwarteten Ergebnisse liefern. Wenn eine Validierung fehlschlägt, sollte die Benutzeroberfläche den Benutzer darüber informieren und ihn daran hindern, fortzufahren, bis die Eingabe korrigiert ist.
Beispiele für Testfälle
Beispiel 1: Registrierungsformular für eine Website
Annahmen:
- Die Website erfordert eine Registrierung mit Benutzername, E-Mail-Adresse und Passwort.
- Der Benutzername darf nur aus Buchstaben und Zahlen bestehen.
- Die E-Mail-Adresse muss ein „@“-Zeichen enthalten.
- Das Passwort muss mindestens 8 Zeichen lang sein.
Testfälle:
- Ein gültiger Benutzername, eine gültige E-Mail-Adresse und ein gültiges Passwort werden eingegeben. Der Benutzer sollte erfolgreich registriert werden.
- Ein Benutzername mit Sonderzeichen wird eingegeben. Das System sollte eine Fehlermeldung anzeigen.
- Eine ungültige E-Mail-Adresse (ohne „@“-Zeichen) wird eingegeben. Das System sollte eine Fehlermeldung anzeigen.
- Ein zu kurzes Passwort (weniger als 8 Zeichen) wird eingegeben. Das System sollte eine Fehlermeldung anzeigen.
Automatisierung
Dieses Beispiel zeigt, wie ihr mit Selenium Testfälle für die Registrierung auf einer Website durchführen könnt. Beachtet, dass ihr die Elemente (z.B., „username“, „email“, „password“) und IDs entsprechend eurer Website anpassen müssen. Sie können auch weitere Testfälle hinzufügen, um die Abdeckung der Validierungsfunktionen zu erhöhen.
from selenium import webdriver from selenium.webdriver.common.keys import Keys # Starten des Webdrivers (z.B., Chrome) driver = webdriver.Chrome() # Testfall 1: Gültige Registrierung driver.get("http://example.com/register") username = driver.find_element_by_id("username") email = driver.find_element_by_id("email") password = driver.find_element_by_id("password") username.send_keys("gültigerBenutzer123") email.send_keys("gültige@email.com") password.send_keys("sicheresPasswort123") password.send_keys(Keys.RETURN) # Drückt die Enter-Taste # Testfall 2: Ungültiger Benutzername mit Sonderzeichen driver.get("http://example.com/register") username = driver.find_element_by_id("username") username.send_keys("ungültiger!Benutzer") # Klicken auf die Registrieren-Schaltfläche register_button = driver.find_element_by_id("register-button") register_button.click() # Überprüfen, ob eine Fehlermeldung angezeigt wird error_message = driver.find_element_by_id("error-message") assert "Ungültiger Benutzername" in error_message.text # Testfall 3: Ungültige E-Mail-Adresse ohne "@"-Zeichen driver.get("http://example.com/register") email = driver.find_element_by_id("email") email.send_keys("ungültigeemail.com") # Klicken auf die Registrieren-Schaltfläche register_button = driver.find_element_by_id("register-button") register_button.click() # Überprüfen, ob eine Fehlermeldung angezeigt wird error_message = driver.find_element_by_id("error-message") assert "Ungültige E-Mail-Adresse" in error_message.text # Testfall 4: Zu kurzes Passwort driver.get("http://example.com/register") password = driver.find_element_by_id("password") password.send_keys("kurz") # Klicken auf die Registrieren-Schaltfläche register_button = driver.find_element_by_id("register-button") register_button.click() # Überprüfen, ob eine Fehlermeldung angezeigt wird error_message = driver.find_element_by_id("error-message") assert "Passwort zu kurz" in error_message.text # Schließen des Browsers driver.quit()
Beispiel 2: Kommentarfunktion in einem Blog
Annahmen:
- Die Blog-Plattform ermöglicht es Benutzern, Kommentare zu Beiträgen zu hinterlassen.
- Kommentare sollten keine HTML- oder JavaScript-Tags enthalten, um Cross-Site Scripting (XSS) zu verhindern.
Testfälle:
- Ein gültiger Kommentar ohne HTML- oder JavaScript-Tags wird hinterlassen. Der Kommentar sollte veröffentlicht werden.
- Ein Kommentar mit HTML-Tags (z.B.,
<a href="malicious-site.com">Besuch diese Seite!</a>
) wird hinterlassen. Das System sollte die Tags entfernen und den Kommentar veröffentlichen. - Ein Kommentar mit JavaScript-Code (z.B.,
<script>alert('Böser Code');</script>
) wird hinterlassen. Das System sollte den Code entfernen und den Kommentar veröffentlichen. - Ein Kommentar mit einer Kombination von HTML-Tags und JavaScript-Code wird hinterlassen. Das System sollte alle unerwünschten Elemente entfernen und den Kommentar veröffentlichen.
Automatisierung
Dieses Beispiel zeigt, wie ihr die Testfälle für die Kommentarfunktion eines Blogs in Python mit Selenium umsetzen könnt. Stellt sicher, dass Sie die Elemente (z.B., „comment-box“, „submit-comment“) und IDs entsprechend eurer Website anpassen. Dieses Beispiel demonstriert die Validierung und Säuberung von Benutzereingaben in einem realen Anwendungsszenario.
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time # Starten des Webdrivers (z.B., Chrome) driver = webdriver.Chrome() # Testfall 1: Gültiger Kommentar ohne HTML- oder JavaScript-Tags driver.get("http://example-blog.com/post/123") comment_box = driver.find_element_by_id("comment-box") comment_text = "Dies ist ein gültiger Kommentar ohne Tags." comment_box.send_keys(comment_text) # Klicken auf die "Kommentar abschicken"-Schaltfläche submit_button = driver.find_element_by_id("submit-comment") submit_button.click() # Überprüfen, ob der Kommentar erfolgreich veröffentlicht wurde time.sleep(2) # Warten auf die Verarbeitung comments = driver.find_elements_by_class_name("comment") last_comment = comments[-1] assert comment_text in last_comment.text # Testfall 2: Kommentar mit HTML-Tags driver.get("http://example-blog.com/post/123") comment_box = driver.find_element_by_id("comment-box") comment_text = "<a href='malicious-site.com'>Besuch diese Seite!</a>" comment_box.send_keys(comment_text) # Klicken auf die "Kommentar abschicken"-Schaltfläche submit_button = driver.find_element_by_id("submit-comment") submit_button.click() # Überprüfen, ob HTML-Tags entfernt wurden und der Kommentar veröffentlicht wurde time.sleep(2) # Warten auf die Verarbeitung comments = driver.find_elements_by_class_name("comment") last_comment = comments[-1] assert "Besuch diese Seite!" in last_comment.text assert "<a href='malicious-site.com'>" not in last_comment.text # Testfall 3: Kommentar mit JavaScript-Code driver.get("http://example-blog.com/post/123") comment_box = driver.find_element_by_id("comment-box") comment_text = "<script>alert('Böser Code');</script>" comment_box.send_keys(comment_text) # Klicken auf die "Kommentar abschicken"-Schaltfläche submit_button = driver.find_element_by_id("submit-comment") submit_button.click() # Überprüfen, ob JavaScript-Code entfernt wurde und der Kommentar veröffentlicht wurde time.sleep(2) # Warten auf die Verarbeitung comments = driver.find_elements_by_class_name("comment") last_comment = comments[-1] assert "Böser Code" not in last_comment.text assert "<script>alert('Böser Code');</script>" not in last_comment.text # Testfall 4: Kommentar mit Kombination von HTML-Tags und JavaScript-Code driver.get("http://example-blog.com/post/123") comment_box = driver.find_element_by_id("comment-box") comment_text = "<a href='malicious-site.com'>Besuch diese Seite!</a><script>alert('Böser Code');</script>" comment_box.send_keys(comment_text) # Klicken auf die "Kommentar abschicken"-Schaltfläche submit_button = driver.find_element_by_id("submit-comment") submit_button.click() # Überprüfen, ob alle unerwünschten Elemente entfernt wurden und der Kommentar veröffentlicht wurde time.sleep(2) # Warten auf die Verarbeitung comments = driver.find_elements_by_class_name("comment") last_comment = comments[-1] assert "Besuch diese Seite!" in last_comment.text assert "<a href='malicious-site.com'>" not in last_comment.text assert "Böser Code" not in last_comment.text assert "<script>alert('Böser Code');</script>" not in last_comment.text # Schließen des Browsers driver.quit()
Neueste Kommentare