Firewall Header Systemtest
Why
Es soll einen Test geben der auf allen Umgebungen prüft ob der HSTS Header bei Anfragen korrekt mitgeliefert wird.
Der HSTS-Wert lässt sich mit
curl --silent --head https://portal.auth-dev.fit-connect.fitko.dev \
| grep -i '^strict-transport-security: max-age=' \
| sed 's/^.\{35\}//'
einfach abfragen. Dann muss der resultierende Wert nur noch mit einem Referenzwert (z.B. 15768000) verglichen werden. Sollte mit überschaubarem Aufwand in ein Python-Skript verwandelbar sein.
Links, Notes, Remarks
https://git.fitko.de/fit-connect/security-header-test
Statt die SystemTest Suite zu erweitern und das selbst zu implementieren könnte wir ein fertiges Tool von OWASP nutzen, genau für diesen Usecase https://owasp.org/www-project-secure-headers/ . Siehe https://github.com/oshp/oshp-validator
planning#518 Cyprus Test:
describe('HSTS Header Check', () => {
it('should have HSTS header set', () => {
cy.request({
url: '/login',
followRedirect: false,
}).then((response) => {
expect(response.headers).to.have.property('strict-transport-security')
expect(response.headers['strict-transport-security']).to.include('max-age')
expect(response.headers['strict-transport-security']).to.include('includeSubDomains')
expect(response.headers['strict-transport-security']).to.include('preload')
})
})
})
Acceptance criteria
-
Die Einhaltung der Konfig wurde mit Test-Tools (-> Mozilla Observatory) manuell getestet. -
Die Einhaltung der Konfig wird für alle Umgebungen via Firewall-Tests (siehe Infra-Repo) automatisiert getestet. (Erledigt für DEV/Test) -
Systemtest ist in der Betriebsdokumentation https://git.fitko.de/fit-connect/betriebshandbuch/ erfasst.
Offene Fragen
- Für DEV und Test können wir die Tests als Bestandteil der Pipeline laufen lassen. Was machen wir aber mit Stage und Prod ?
Implementation plan (to be completed by the developer)
-
... -
... -
Definition of Done was checked.
Edited by Rico Lang