Skip to content

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

  1. Die Einhaltung der Konfig wurde mit Test-Tools (-> Mozilla Observatory) manuell getestet.
  2. Die Einhaltung der Konfig wird für alle Umgebungen via Firewall-Tests (siehe Infra-Repo) automatisiert getestet. (Erledigt für DEV/Test)
  3. 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)

Edited by Rico Lang