Raketenhandbuchleser: mysql: Login

Beitrag lesen

Ich weiß nicht, was du mit dem include zeigen willst.

Ich dachte doch WIRKLICH, dass PHP bei der Ausgabe von Fehlermeldungen konsequent ist:

  • Beim gezeigten include '<script>alert("Böse");</script>'; wird das Zeug maskiert.

Dem ist aber NICHT so:

  • Bei trigger_error('<script>alert("Böse");</script>') wird das Skriptzeug ungerührt ausgegeben. Es gibt dafür nicht einmal eine Option für das Maskieren. Auch ini_set("display_errors", 1); (bzw. die php.ini) bietet hierzu nichts an.

Allerdings habe ich in der Dok die schweinchenfarbige Box übersehen:

Warnung

HTML-Entities in der error_msg werden nicht automatisch escaped. Wenn die Fehlermeldung in einem Browser ausgegeben werden soll so sollten Sie diese in diesem Fall selbst mit htmlentities() vorverarbeiten.

Asche auf mein Haupt…

Was ist so schlimm daran der Empfehlung des W3C zu folgen eine striktere Policy zu implementieren?

Nun, nachdem ich Inline-CSS und Inline-JS in zwei Blöcken im Header stehen und mit einer „nonce“ versehen habe, konnte ich die Policy strikter formulieren:

X-XSS-Protection: 1; mode=block
X-Frame-Options: deny
Origin: http://localhost
Access-Control-Allow-Origin: http://localhost
Content-Security-Policy: default-src 'none'; style-src 'nonce-d0e884cde3afa316d0bc3cce'; script-src 'nonce-1d76a2c9c922642ade6bc1df'; img-src data:; form-action 'self'; base-uri 'self'
X-Content-Security-Policy: default-src 'none'; style-src 'nonce-d0e884cde3afa316d0bc3cce'; script-src 'nonce-1d76a2c9c922642ade6bc1df'; img-src data:; form-action 'self'; base-uri 'self'
X-WebKit-CSP: default-src 'none'; style-src 'nonce-d0e884cde3afa316d0bc3cce'; script-src 'nonce-1d76a2c9c922642ade6bc1df'; img-src data:; form-action 'self'; base-uri 'self'
Referrer-Policy: strict-origin-when-cross-origin

Außerdem hat die Version 4.3 noch ein paar Neuerungen.

Was leider nicht funktionierte waren kryptographisch strenge Vorschläge für die Passwörter - da hängt der Browser (Firefox, Chromium unter Ubuntu ) ab dem 3. oder 4. Passwort und wartet (wohl auf Entropie) - Ich musste also auf das schnöde Math.random() zurückfallen, habe das aber mit ein paar, von den aktuellen Microsekunden abhängigen Leerabrufen „aufgebessert“ und bei der Gelegenheit auch für einen hübschen optischen Effekt gesorgt. Auch die Cookies werden jetzt wesentlich strikter gehandhabt: SameSite=Strict bei http und SameSite=Strict; secure bei https.

(In der Voreinstellung ist http nur für den localhost bzw. das Netz 127.0.0.0/8) erlaubt.

Bevor das auffällt: Das Favicon ist jetzt fest (base64-kodiert) integriert. Nicht, dass es da irgendwelche Probleme mit Weiterleitungen, fremden Servern oder dergleichen gibt.