Du hast noch drei weitere XSS-Sicherheitslücken, überall da wo du
<?=$_SERVER['PHP_SELF'];?>
stehen hast.
Oh. Das war in 2 von 3 Fallen sogar besser ganz wegzulassen (man muss <form>
kein action auf den Weg geben um das selbe Skript zu adressieren).
Die Zeile
header( 'Location: ' . $_SERVER['PHP_SELF'] );
braucht auch Aufmerksamkeit. Ich weiß nicht, wie Browser mit fehlerhaften Location-Headern verfahren.
13. Mai 2020 - Newflash: „Die Browser können seit sehr vielen Jahren mit relativen (nicht: „fehlerhaften") URLs in Location-Headern wunderbar umgehen. Anderes „Wissen“ ist veraltet.“
Benutze besser eine der etablierten, und intensiv erprobten Verteidigungs-Mechanismen.
Ah ja. Eine richtig schöne und große Scriptsammlung.
Das wäre in meinem Fall so, als würde ich am Nordpol eine riesige Verteidungsanlage errichten, damit $böserFeind
nicht mit Infrarotzielköpfen auf die dort befindlichen Eisbrocken schießen kann - und auf diese Weise etwas errichten, auf das es es sich überhaupt zu schießen lohnt. Anders ausgedrückt, behandeln die Jungs von OWASP einen Haufen von Problemen, die mein Skript nicht haben kann - jedenfalls so lange nicht jemand versucht, es in etwas wie Wordpress zu integrieren, Facebookbuttons zu integrieren ider Werbebanner darauf zu pflanzen. Alles Zeug, was ich nicht nur missbillige, sondern explizit verhindere.
Aber ich habe trotzdem Einiges getan. Ich habe strenge HTTP-Header gesetzt:
- X-XSS-Protection
- X-Frame-Options
- Origin
- Access-Control-Allow-Origin
- Content-Security-Policy
- X-Content-Security-Policy
- X-WebKit-CSP
- Referrer-Policy
sowie das Laden als Frame oder serverseitig mit include/require verhindert. Neu ist aber auch eine Rückfragen beim Umschalten des Verzeichnisschutzes. Ferner ist die Verwaltung auf in der Konfiguatrion bestimmbare Benutzer beschränkbar. Die Farben der Anwendung unterscheiden sich, wenn der Zugriffschutz besteht oder nicht. Und: Vor allen verändernden Aktionen wird der Referer geprüft.
Fast am wichtigsten: Der Verwender wird nach einem Login jetzt sehr explizit aufgefordert, dass Browserfenster zu schließen um sich "abzumelden". Javascript muss ja für irgendetwas gut sein...