Security-relevante HTTP Header
Eine Web-Anwendung sollte eine Reihe von HTTP-Headern standardmäßig setzen, um einem Browser die Erlaubnis zu erteilen zumindes groben Unfug zu verhindern.
Kein Content-Type-Sniffing
Dem Content-Type-Header vertrauen, statt zu versuchen, die Art eines Dokuments am Inhalt zu erraten:
X-Content-Type-Options: nosniff
Vgl.
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
- https://blog.mozilla.org/security/2016/08/26/mitigating-mime-confusion-attacks-in-firefox/
Browser-Heuristiken für XSS-Erkennung
Aktivieren von Heuristiken, die das Einschleusen von Code über die URL in die Seite.
X-XSS-Protection: 1; mode=block
Vgl.
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
- https://blog.innerht.ml/the-misunderstood-x-xss-protection/
Einmal HTTPS, immer HTTPS
HTTP-Zugriff verhindern, wenn die Seite einmal über HTTPS aufgerufen werden konnte. Diese Option schadet auch insbesondere in einer Test-Umgebung nichts, wenn überhaut kein HTTPS-Zugriff möglich ist:
Strict-Transport-Security: max-age=31536000; includeSubDomains
Vgl.
Nicht in fremden Frames
Die Seite nicht als Inhalt in fremden Frames laden lassen:
X-Frame-Options: SAMEORIGIN
Vgl.
Konfiguration
In der web.xml
der Applikation muss folgender Filter eintragen sein:
<filter>
<filter-name>HttpSecureHeaderFilter</filter-name>
<filter-class>com.top_logic.knowledge.gui.layout.HttpSecureHeaderFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpSecureHeaderFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Die Header können auch in einem vorgeschalteten Apache gesetzt werden:
Header set X-Content-Type-Options "nosniff"
Header set X-XSS-Protection "1; mode=block"
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header set X-Frame-Options "SAMEORIGIN"
Dann (und nur dann) muss der Check in der Anwendung ausgeschaltet werden:
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.top_logic.base.accesscontrol.LoginPageServlet</servlet-class>
<init-param>
<param-name>disableSecureHeaderCheck</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>