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. Auchini_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.