Shopware und die Security Header

Ein permanentes Thema für Webseiten- und vor allem Shop-Betreiber ist das Thema Sicherheit. Shopware sichert das System mit regelmäßigen Updates und dem hauseigenen Sicherheits-Plugin kontinuierlich ab. Das Sicherheits-Plugin ermöglicht Shopware-Shop-Betreibern, auch ältere Shopware-Versionen auf dem aktuellen Stand der Sicherheit zu halten, sofern es im Plugin-Manager auch zuverlässig auf den neuesten Stand gebracht wird.

Während Shopware also intern den Shop gegen Hacker- und Phishing-Attacken abriegelt, bleiben die externen – also individuellen Maßnahmen für Besucher des Shops weiterhin in der Hand der Betreiber selbst.

Hier kommen die HTTP Security-Header ins Spiel, mittels derer Funktionen moderne Webbrowser Nutzer vor Angriffen bewahren können. Sie bestimmen die Regularien, welche Inhalte von wem gestattet sind, um z.B. Manipulationsversuche von HTML, CSS und JS Code aus unbekannten Quellen zu verhindern.

Security Header können beispielsweise in der .htaccess in folgendem Tag definiert werden:

<IfModule mod_headers.c>
[…]
</IfModule>

Diese Security Header können Ihnen helfen

X-XSS-Protection

unterdrückt „Reflective Cross-Site-Scripting Attacken“, welche über GET oder POST gesendete Parameter an den Nutzer „reflektieren“. Darüber ließen sich sonst Links konstruieren, die bösartiges JavaScript im Browser des Besuchers ausführen.

Empfohlene Einstellung:

Header set X-XSS-Protection "1; mode=block"

 

X-Content-Type-Options

unterbindet mit das Standardverhalten des Browsers, zu raten, welcher Datentyp übermittelt wurde, wenn die entsprechende Dateiendung oder die Kennzeichnung im Content-Type Header fehlt. Beim Hochladen einer undefinierten Datei würde damit meistens „text/html“ angewandt und somit schädlicher Code ausgeführt werden können.

Empfohlene Einstellung:

Header set X-Content-Type-Options nosniff

 

X-Frame-Options

legt fest, ob eine bestimmte Webseite in einem Frame integriert werden darf. So werden iFrames auf der eigentlichen Seite nicht eingeschränkt. Der Header sorgt aber dafür, dass entsprechende Seiten vom Browser nicht geladen werden, wenn sie in einer anderen oder unbekannten, mutmaßlicher Weise einer schädlichen Seite eingebettet wurden.

Mögliche Einstellungen:

Header always append X-Frame-Options DENY, SAMEORIGIN, ALLOW-FROM

 

Strict-Transport-Security

teilt dem genutzten Browser des Nutzers mit, dass die aktuell aufgerufene Seite für einen frei wählbaren Zeitraum nur per HTTPS aufgerufen werden darf. HTTP-Aufrufe werden somit in HTTPS-Verbindungen umgewandelt.

Empfohlene Einstellungen mit mindestens 6 Monaten:

Header set Strict-Transport-Security max-age=17280000

 

Feature-Policy

kann z.B. die Aktivierung von Kamera, Mikrofon und der Payment-API verbieten. Ebenso kann Feature Policy den Abruf des aktuellen Standorts oder oder die Vibrationsfunktion blockieren.

Empfohlene Einstellung:

Header set Feature-Policy "camera 'none'; microphone 'none'; payment 'none'; geolocation 'none'; vibrate 'none';"

 

Referrer-Policy

verschleiert beim Verlassen der Webseite durch Klick auf einen Link zu einer anderen Domain die Herkunft der Nutzer. Dies betrifft vorrangig den Datenschutz.

Empfohlene Einstellung:

Header set Referrer-Policy no-referrer

 

Content-Security-Policy

kurz CSP legt detailliert fest, welche Verwendung von diversen Datentypen und deren Quelle auf der Seite zugelassen ist.

Dieser Header kann generell in Verbindung mit Shops bei zu strikter Regulierung für Probleme sorgen. Durch den Einsatz von Payment Plugins und Inline JS etc. können ganze Funktionalitäten ausgehebelt werden.

Für Shopware 5 empfiehlt sich daher folgende Einstellung:
default-src https:; script-src https: 'unsafe-inline' 'unsafe-eval' data:; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:

Die härteste Einstellung wäre:
default-src 'self' und script-src 'self'

Das ist mit Shopware 5 und seinem Aufbau der Einkaufswelten etc aber leider noch nicht realisierbar. Dazu kommen die Verknüpfungen mit Google Adwords, Analytics und sonstige Tracking-Provider, die aktuell noch sehr gerne über Inline-JavaScript ihre Dienste einbinden.

Ein komplettes Beispiel für Shopware könnte demnach so aussehen:

<IfModule mod_headers.c>

    Header set X-XSS-Protection "1; mode=block"

    Header always append X-Frame-Options SAMEORIGIN

    Header set X-Content-Type-Options nosniff

    Header set Strict-Transport-Security max-age=31536000; includeSubDomains

    Header set Referrer-Policy no-referrer

    Header set Feature-Policy "camera 'none'; microphone 'none'; geolocation 'none'; vibrate 'none';"

    Header set Content-Security-Policy " default-src https:; script-src https: 'unsafe-inline' 'unsafe-eval' data:; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:"

</IfModule>

 

Es existieren mittlerweile auch Plugins, die die Einbindung der Security Header bequem im Backend ermöglichen. Da wird Shopware aber sicher nicht das einzige Shop-System bleiben.

In diesem Sinne, fröhliches Absichern!