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>