zurück zur Übersicht

Website absichern mit HTML, Apache, .htaccess

Situation

Eine Website läuft unter Debian auf einem lokalen Apache Webserver und ist bereit, auf den Webserver im Internet hochgeladen zu werden.
Nach dem Hochladen läuft die Website einwandfrei. Ein Test bei 'Webcoll' weist aus, dass es einige offene Themen gibt. Es sollen also noch zusätzliche Sicherheitseinstellungen eingerichtet werden.

Aufkommendes Thema

Die Sicherheitsteinstellungen werden bewirken, dass zum Beispiel in der jeweiligen HTML-Datei direkt hinterlegte Java-Skripte, bestimmte Absatz- und Tabellenformatierungen nicht länger funktionieren. Als Vorarbeit testet man am besten auf dem lokalen Apache-Webserver, wo es tatsächlich ein Thema gibt.

Technisch müssen die Javaskripte in Dateien ausgelagert und dann über die Metaangaben im Head-Bereich eingebunden werden.
Besondere Formatierungen müssen in css ausgelagert werden.

Das Problem ist die Entscheidung

Man darf sich entscheiden, die Einstellungen über HTML und dann in jeder einzelnen HTML-Datei zu hinterlegen oder das einmalig in der .htaccess-Datei auf dem Webserver des Providers zu tun, sofern der Provider gestattet, auf diese Datei zuzugreifen und deren Inhalt zu ändern.
Ausnahme: Clickjacking, siehe unten.

Völlig klar: Wenn man das sogleich auf dem Webserver des Providers aktiviert, dann kann wirken sich die Änderungen sogleich aus.
Hilfsweise kann man auf dem lokalen Webserver eine Test-Datei mit allen Funktionen erstellen und prüfen, wie die Änderung sich auswirkt.

Abhilfe Weg 1: HTML

In den Metadaten jeder HTML-Datei dies hier hinterlegen. Zeilenümbrüche dürfen nach einem ';' eingefügt werden:

<meta http-equiv="Content-Security-Policy" content="default-src 'none'; 
script-src 'self'; img-src 'self'; style-src 'self'; font-src 'self'; 
connect-src 'self'; form-action 'self'; base-uri 'self'; media-src 'self';">

Abhilfe Weg 2: auf dem Apache-Webserver des Providers

Sofern der Provider das gestattet, kann man die Einstellungen einmal in einer Datei hinterlegen. Diese Einstellungen wirken sich dann auf alle Dateien der Website aus.
Nachteil: Ich konnte das auf dem lokalen Webserver nicht 1:1 ausprobieren.

.htaccess

Sofern vorhanden, lädt man die .htaccess vom Webserver des Providers herunter und fügt am Ende dies hier an:

<IfModule mod_headers.c>
  Header set Content-Security-Policy "default-src 'none'; 
  script-src 'self'; img-src 'self'; style-src 'self'; 
  font-src 'self'; connect-src 'self'; form-action 'self'; 
  base-uri 'self'; frame-ancestors 'none';"
    Header set X-Frame-Options "DENY"
</IfModule>

Sollte die Datei auf dem lokalen Rechner nicht sichtbar sein, kann man mit [Strg]+[h] die Systemdateien einblenden.

Unter Windows kann ein Dateiname nicht mit einem Punkt beginnen. Der Name kann also gegebenenfalls auf dem lokalen Rechner anders lauten und nach dem Hochladen auf den Webserver des Providers geändert werden.

Clickjacking

Soweit ich in Erfahrung bringen konnte, kann Clickjacking nicht mit einem Eintrag in HTML abgewehrt werden. Das muss auf dem Apache in .htaccess geschehen. Das ist dann dieser Eintrag:

Header set X-Frame-Options "DENY"

Weniger streng ist:

Header set X-Frame-Options "SAMEORIGIN"

Übersicht der Effekte