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.

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.

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>