uberspace v7.7: web headers

Posted by luto on Tuesday, June 16, 2020

Etherpad-lite anderswo framen? klar. Eine Content-Security-Policy setzen, obwohl die App kein Feature dazu hat? sicher. Den X-Xss-Protection-Header ausmachen? ohje, bitte nicht (geht aber auch). Jetzt frisch auf deinem Uberspace.

tl;dr: You can now change outgoing HTTP headers using uberspace web header. Have a look at the Manual for more details in English.

Für die kurz angebundenen: uberspace web header set / X-Frame-Options ALLOW - so einfach geht das ab heute. Details dazu gibt es, wie immer, im Manual.

Neben dem neuen Feature haben wir in v7.7.0 auch zwei Defaults angepasst:

  1. HSTS gilt jetzt für ein Jahr.
  2. HTTP=>HTTPS Redirects laufen nun über 301 und nicht 302.

Nun aber zum neuen Kommando:

[isabell@philae ~]$ uberspace web header list
Default Headers:
  Referrer-Policy: strict-origin-when-cross-origin
  Strict-Transport-Security: max-age=172800
  X-Content-Type-Options: nosniff
  X-Frame-Options: SAMEORIGIN
  X-Xss-Protection: 1; mode=block

So schaut das aus, auf einem frischen Uberspace. Neben der Doku im Manual dokumentiert gibt es jetzt auch auf via SSH eine Übersicht über die von uns gesetzten Header.

Der Clou ist allerdings, dass sich die Header nicht nur anzeigen, sondern auch ändern lassen. Ist DENY etwas zu streng? Mit ALLOW lässt sich die Seite anderswo als Frame einbinden:

[isabell@philae ~]$ uberspace web header set / X-Frame-Options ALLOW
Set header "X-Frame-Options: ALLOW" for /
[isabell@philae ~]$ uberspace web header list
/
  X-Frame-Options: ALLOW
Default Headers:
  Referrer-Policy: strict-origin-when-cross-origin
  Strict-Transport-Security: max-age=172800
  (...)

Wie auch bei unseren Web Backends klappt das natürlich für beliebige Kombinatonen aus Domains und Pfaden. So kann Isabell ihrem Blog einen besonderen Header verpassen, ohne ihn gleich für alle anderen Pfade zu setzen:

[isabell@philae ~]$ uberspace web header set isabell.blog/leseecke X-Clacks-Overhead "GNU Terry Pratchett"
Set header "X-Clacks-Overhead: GNU Terry Pratchett" for isabell.blog/leseecke
[isabell@philae ~]$ uberspace web header list
isabell.blog/leseecke
  X-Clacks-Overhead: GNU Terry Pratchett
Default Headers:
  Referrer-Policy: strict-origin-when-cross-origin
  Strict-Transport-Security: max-age=172800
  (...)

Oder darf’s ein wenig komplizerter sein? Der Pfad /blog soll einen X-Frame-Options-Header bekommen. Allerdings soll /blog/iframe anderswo via iframe eingebunden werden dürfen, also muss er dort wieder weg:

[isabell@philae ~]$ uberspace web header set /blog X-Frame-Options DENY
[isabell@philae ~]$ uberspace web header suppress /blog/iframe X-Frame-Options
Suppressing header "X-Frame-Options" for /blog/iframe
[isabell@philae ~]$ uberspace web header list
/blog/iframe
  X-Frame-Options: (suppressed)
/blog
  X-Frame-Options: DENY
Default Headers:
  Referrer-Policy: strict-origin-when-cross-origin
  Strict-Transport-Security: max-age=172800
  (...)

Wenn der Header wieder aus der Config verschwinden soll, klappt das analog zu den anderen Befehlen mit web header del. Alle weiteren Details zum neuen Feature gibt es im Manual.