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:

  1. Ein gültiger Benutzername, eine gültige E-Mail-Adresse und ein gültiges Passwort werden eingegeben. Der Benutzer sollte erfolgreich registriert werden.
  2. Ein Benutzername mit Sonderzeichen wird eingegeben. Das System sollte eine Fehlermeldung anzeigen.
  3. Eine ungültige E-Mail-Adresse (ohne “@”-Zeichen) wird eingegeben. Das System sollte eine Fehlermeldung anzeigen.
  4. 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:

  1. Ein gültiger Kommentar ohne HTML- oder JavaScript-Tags wird hinterlassen. Der Kommentar sollte veröffentlicht werden.
  2. 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.
  3. 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.
  4. 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()