Die Gier auf den ersten Platz
Mit Wehmut im Herzen erinnere ich mich gerade daran das mir nur 2 Punkte auf ein perfektes Ergebnis beim Führerschein gefehlt haben. Nur schlimmer war der Linux Test. Dort wusste ich genau wo der eine Punkt für die 100% hergekommen ist und ich wollte es ausdiskutieren. Linux braucht nicht mindestens 2 Partitionen um zu laufen. Es braucht keine einzige! CDs und Disketten können nicht partitioniert werden. Das konnte ich jedoch nicht auswählen, daher habe ich eine Partition gewählt, denn Linux braucht keine Swap Partiton es kann auch mit Swap Dateien arbeiten, auch wenn das auf Kosten der Leistung geht. Natürlich war bei diesem Computertest wieder kein einziger Mensch erreichbar und diesen Fehler in den Antworten zu bereinigen.
Vor kurzem hat wieder so ein furchtbarer Schlag mein Ego getroffen. Mozilla hat ein neues Tool vorgestellt, den Security Observer! Erreichbar unter: https://observatory.mozilla.org/
Ich Idiot habe das Ding natürlich gleich aufgemacht und ein paar Seiten um die ich mich kümmere getestet. Es war eine Katastrophe! Die beste Bewertung war ein “B”, das Forum des Riichi Mahjong Verbandes hatte sogar nur ein “D”. Das andere renommierte Seiten mit einem “E”, oder “F” abschlossen, war zwar erheiternd aber nicht beruhigend.
Was macht der gesunde Mensch mit inneren Zwängen in so einen Fall? Genau! Alles einstellen was nur geht, damit man eine gute Note bekommt. Das war aber leichter gesagt als getan.
- Dank Let’s Encrypt waren eh schon alle Seiten nur über HTTPS erreichbar.
- An der TLS Veschlüsselung kann ich jedoch nur auf meiner lokalen Maschine herumschrauben. Auf den shared Hosting Angeboten ist da für mich nichts zu machen.
- Der Secure Flag für Cookies ist Ehrensache bei Software die ich geschrieben habe. Bei Fremdsoftware ist es nicht so leicht, die ist zwar freie Software/Open Source und ich kann es patchen, ob dieser Patch jedoch akzeptiert und eingepflegt wird, oder ich beim nächsten Update wieder nachbessern muss steht auf einen anderen Blatt. Egal! Alle Seiten sind nur über https:// erreichbar, “unsichere Cookies” können also eh nicht unsicher übertragen werden.
- Der Rest der geprüft wird sind HTTP Header. Das sollte ja die leichteste Übung sein. Das trage ich beim Server in der .htaccess ein, was gesetzt werden soll.
Sehr viel Zeit später habe ich es dann doch geschafft.
- Bei einem Provider wird eine lighttpd & gunicorn Installation verwendet, wo alle Header welche ich außerhalb von Python/Django setzen will verloren gehen. Gut das fast Alles was ich brauche von der SecurtiyMiddleware des Django Frameworks erledigt werden kann. Für die Content Security Policy habe ich halt noch django-csp installiert und eingereichtet. Fertig!
- Überspace arbeitet mit Apache wo man fast alles in der .htaccess konfigurieren kann. Damit war diese Seite schnell erledigt.
- Aber ich habe verdammt viel Zeit damit verbracht andere Subdomains wo PHP verwendet wird abzusichern. Bei den fertigen Lösungen waren solche Header nicht vorgesehen und wenn Apache die Anfrage an PHP übergibt ändert er danach nichts mehr an den Headern. Am Ende habe ich es richtig brutal gelöst. In den jeweiligen config.php Dateien ein setheader(); dazu gegeben und geschaut ob das Teil noch funktioniert. Es hat überall geklappt und ich bin glücklich.
Fazit: Alles was ich persönlich geschmiedet habe, wie https://kasu.at/ oder https://riichimahjong.at/, hat jetzt die Bestnote A+! Und auch die PHP Scripte konnten so weit abgesichert werden das es wenigsten ein A- dafür gibt.
Was machen diese Header überhaupt?
Ab hier ist wird es Lustig. Ich habe soviel Zeit investiert ein perfektes doppeltes Netz unter einer sehr sicheren und stabilen Software zu spannen. Die Header sagen folgedes aus:
- Verwende immer nur eine Verschlüsselte Verbindung zu dem Server.
- Wenn du das nicht machst, leite ich dich auf die sichere Verbindung um. Pech gehabt!
- Schicke Cookies immer nur über die gesicherte Verbindung.
- Das dieser Server nur echt mit einem Zertifikat von Let’s Encrypt ist.
- 5 Header die die Browser alle Sagen das er hier nichts von anderen fremdem Seiten herunterladen soll und die Seite auch sonst nichts mit anderen fremden Seiten zu tun haben will.
Der letzte Punkt ist wichtig damit ein böser Hacker keine bösen Sachen mit seinem Code nachladen kann, den er irgendwie in die Homepage reinschmuggeln konnte. Ich schreibe jedoch alle Anwendungen mit Hilfe von Django und dieses Framework hat sehr viele Möglichkeiten integriert das solche Angriffe bereits vom Server abgefangen werden. Das ich also für eine bessere Note einige Nächte zum Tag gemacht habe, war wohl eine reine Fleißaufgabe.