03. Mai 2022
Website-Tests mit Firefox und Content Security Policy (CSP)
Die Content Security Policies sind ein mächtiges Werkzeug, um Cross-Site-Scripting-Angriffe auf Webseiten und Webanwendungen zu erschweren. Dabei sendet der Webserver dem Browser mit den Response Headern ein oder mehrere Content-Security-Policy
-Kopfzeilen, die zum Beispiel explizit definieren, welcher Javascript-Code im Kontext der Seite ausgeführt werden darf.
Wenn QF-Test eine Webanwendung testet, so muss QF-Test eng mit der Anwendung interagieren, um Komponenten wiederzuerkennen, Checks durchzuführen und die Aufzeichnung von Tests zu erlauben. Dabei wird zum Beispiel über die WebDriver-Schnittstelle von QF-Test Javascript-Code im Kontext der Website ausgeführt - und hier kann eine strenge CSP-Regel dazwischenfunken. Daher wird der Browser von QF-Test in einem Modus gestartet, in dem die Content-Security-Policy-Kopfzeilen ignoriert werden.
Leider ist dies bei Firefox seit Version 99 nicht mehr einfach möglich - mit dem Ergebnis, dass QF-Test bei entsprechend geschützten Webanwendungen eine DocumentNotLoaded
-Exception anzeigt.
Um dieses Problem zu umgehen gibt es prinzipiell drei Ansätze:
- Die Webanwendung in einem "Testmodus" ausführen, der keine CSP-Header ausliefert.
- Die CSP-Header über einen Proxy entfernen.
- Die CSP-Header über eine Browsererweiterung entfernen.
Die Webanwendung im "Testmodus" ausführen
Dies ist der beste Weg, wenn auf die zu testende Webanwendung Einfluss genommen werden kann - wenn die Anwendung auf dem Testserver in einem speziellen, "CSP-freien" Modus gestartet werden kann, so treten die Probleme beim Testen mit QF-Test nicht mehr auf.
Die CSP-Header über einen Proxy entfernen
Beim Start eines Web-Tests können Sie beim Aufruf der Prozedur qfs.web.browser.settings.doStartupSettings
über die Parameter proxyAddress
und proxyPort
einen Proxy angeben, über welchen die Websiten geladen werden. In diesem Proxy können Sie dann die störenden Response-Header entfernen, zum Beispiel mit nginx, squid, mitmproxy oder mit dem Java-Proxy browsermob-proxy, den Sie auch über SUT-Skripte konfigurieren können.
Die CSP-Header über eine Browsererweiterung entfernen
Als dritte Option bleibt, den Header im Browser über ein Add-On zu entfernen, zum Beispiel mit ModHeader, oder mit simple-modify-headers. Dies ist auch die Vorgehensweise, die Mozilla Entwickler empfehlen.
Zum Einrichten gehen Sie so vor:
- Erstellen Sie mit dem Schnellstart-Assistenten in QF-Test eine neue Startsequenz, welches die Testseite https://content-security-policy.com/browser-test/ öffnet. Wenn die Boxen auf der Seite rot dargestellt werden, ist (für den Test) alles gut, sind sie grün, dann wird CSP nicht ignoriert.
- Navigieren Sie in diesem Browser zur Installationsseite des Add-Ons, zum Beispiel https://addons.mozilla.org/de/firefox/addon/simple-modify-header/ - QF-Test verwendet für seine Tests ein dediziertes Profil, daher ist es wichtig, dass die Installation in diesem Profil erfolgt.
- Installieren Sie das Add-On über den Knopf "zu Firefox hinzufügen".
- Jetzt erscheint oben rechts neben der Adressleiste ein Icon für die Konfiguration. Öffnen Sie damit die Konfigurationsseite (Wenn der Browser zu Flackern anfängt, so können Sie den ersten Tab schließen).
- Definieren Sie eine Regel, die für alle URLs gilt ("Url Patterns*: *"), mit der Aktion "Delete", dem Header Field Name
Content-Security-Policy
und einem leeren Value, die auf Server-Antworten angewendet wird ("Apply on Response"). Speichern Sie mit "Save". - Bei simple-modify-headers müssen Sie das Add-On noch über das "START"-Icon starten.
- Wenn Sie nun den Browser schließen und dann die Startsequenz noch einmal ausführen, so sollten die Boxen auf der Testseite rot erscheinen.
- Nun sollten auch mit CSP-geschützen Anwendungen keine CSP-Probleme beim Testen mehr auftreten.