Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dump() -> CSP-violation - (directive 'style-src') #5503

Open
oioix opened this issue Jan 9, 2023 · 10 comments
Open

dump() -> CSP-violation - (directive 'style-src') #5503

oioix opened this issue Jan 9, 2023 · 10 comments
Labels
Core REDAXO Core related things

Comments

@oioix
Copy link

oioix commented Jan 9, 2023

REDAXO: 5.14.2
PHP: 8.1
Browser: Firefox

dump() ist ja ein super praktisches Tool zum debuggen.
Das dump-Fenster wird offenbar über ein JS <script> Sfdump = window.Sfdump ... erzeugt.

Die Verwendung von CSP zum Schutz der Website gegen XSS wird inzwischen immer wichtiger.
Nach der Umstellung auf eine striktere CSP Direktive, die mit Nonce arbeitet und aus Sicherheitsgründen keine unsafe-inline mehr zulässt, gibt es nun im Frontend mit dump($meinCode) bei jedem Reload zwei CSP-Violations mit entsprechendem (E-Mail-/Log-Report).

<script> und <style> kann man automatisch über den output-filter mit einem Nonce versehen. Das ist problemlos lösbar. Mit diesen beiden Tags und deren Inhalt gibt es so gelöst keine Probleme.

Es gibt aber offensichtlich im dump($meinCode)-Code zwei Stellen (Zeichenpositionen 554 und 691), wo noch anderes Inline-CSS verwendet wird (also nicht innerhalb eines <style>-Tag, sondern vermutlich style="" welches möglicherweise per innerHTML eingefügt wird). Inline CSS mit style="" kann leider nicht mit einem Nonce legitimiert werden. Mit einem class="" wäre dies vermeidbar.

Screenshot 2023-01-09 | 22 55 00

Abgesehen von der CSP-Violoation-Meldung kommt mit dem dump($meinCode) in der Konsole auch die (gelbe) Meldung:

Diese Seite befindet sich im Kompatibilitätsmodus (Quirks). Das Seitenlayout kann beeinflusst werden. Verwenden Sie für den Standardmodus "<!DOCTYPE html>".
@gharlan
Copy link
Member

gharlan commented Jan 10, 2023

Wir nutzen die dump-Funktion aus symfony/var-dumper, und dort werden diese inline-styles tief im Innern des JS-Codes gesetzt: https://github.com/symfony/var-dumper/blob/92a342cd476603a3e8404bc802626df14da46e93/Dumper/HtmlDumper.php#L351

Ich sehe nicht, wie wir da, von REDAXO aus, sinnvoll etwas tun können.

Hast du eine Idee?

@gharlan gharlan added the Core REDAXO Core related things label Jan 10, 2023
@gharlan
Copy link
Member

gharlan commented Jan 10, 2023

Hmm, die von mir verlinkte Zeile sollte eigentlich kein Problem sein:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src

However, styles properties that are set directly on the element's style property will not be blocked, allowing users to safely manipulate styles via JavaScript:

document.querySelector('div').style.display = 'none';

Kannst du nochmal schauen, um welches style-Attribut es bei dir genau geht? Also was steht im style-Attribut?

@gharlan
Copy link
Member

gharlan commented Jan 10, 2023

Achso, kann es sein, dass es um <style>-Tags geht, die dynamisch durch symfony hinzugefügt werden, also keine style=""-Attribute?

@alxndr-w
Copy link
Contributor

Du kannst während der Entwicklung dem Browser mitteilen, CSP zu ignorieren bzw den Header zu modifizieren, z.B. über eine Browser-Erweiterung. Z.B.:

https://chrome.google.com/webstore/detail/redirect-url-modify-heade/mdnleldcmiljblolnjhpnblkcekpdkpa

Vielleicht bietet Firefox auch eine eigene Möglichkeit.

Eine andere Möglichkeit könnte sein, wenn REDAXO den Header überschreibt, solange der Entwickler-Modus aktiv ist oder man als Admin eingeloggt ist. Schön wäre das jedoch nicht, denn als Entwickler will man doch möglichst nah das Live-Verhalten haben bei sowas, denke ich.

@oioix eine separate Entwicklungsinstallation mit eigenen CSP-Einstellungen kommt nicht infrage?

@oioix
Copy link
Author

oioix commented Jan 11, 2023

Ich sehe nicht, wie wir da, von REDAXO aus, sinnvoll etwas tun können.

Verstehe. Ich dachte das wäre eine Eigenentwicklung. ;-)

Kannst du nochmal schauen, um welches style-Attribut es bei dir genau geht? Also was steht im style-Attribut?

Das Problem ist, dass der gesamte JS-Code in der Frontendausgabe in einer Zeile steht. Die Positionsangaben 554 und 691 sind zwar klar, aber wenn ich mir diese beiden Stellen mit dem Editor anzeigen lasse werde ich nicht schlau daraus, wie das Style hier genau erzeugt wird.

An den beiden Stellen 554 und 691 die der CSP-Report angibt findet sich beides mal dieses: (doc.documentElement.firstElementChild || doc.documentElement.children[0]).appendChild(refStyle); wobei firstElementChild unterstrichen ist.

Screenshot 2023-01-11 | 22 16 55

Es sieht so aus, als ob wird ein refStyle mit einem { display: none; } über ein innerHTML angehängt wird (append) .

Der CSP-Report gibt bei Stelle 554 als Sample aus (siehe auch rotes Bild oben):
Source: pre.sf-dump .sf-dump-compact, .sf-dump-str-collapse .sf-dump-str-collapse, .sf-dump-str-expand .sf-dump-str-expand { display: none; }

Und das passt exakt zum JS-Code in der Frontend-Ausgabe:
refStyle.innerHTML = 'pre.sf-dump .sf-dump-compact, .sf-dump-str-collapse .sf-dump-str-collapse, .sf-dump-str-expand .sf-dump-str-expand { display: none; }';

Mehr konnte ich nicht heraus bekommen.

@oioix
Copy link
Author

oioix commented Jan 11, 2023

eine separate Entwicklungsinstallation mit eigenen CSP-Einstellungen kommt nicht infrage?

Es gibt schon einen Weg. Man kann die Ausgabe an einen Backend-Login knüpfen.

Nur ist es so, dass ich die CSP-Direktive extra aufgrund eines konkreten Alasses verschärft hatte, weil ich gerade während der Entwicklung einer oath-Schnittstelle bei einem großen Anbieter (also mit einem Backend-Login) im Zuge einer oauth-Atthentifizierung bei der Rückkehr von der Anbieterseite immer wieder aus Redaxo ausgeloggt wurde. Trotz RememberMe wohl gemerkt. Eine XXS-Attacke auf die Session war nicht komplett auzuschließen.

Die CSP-Direktive abzuschalten oder unsicherer zu gestalten wäre in einer solchen Situation dann wohl eher keine gute Idee. ;-)

@oioix
Copy link
Author

oioix commented Jan 11, 2023

Wir nutzen die dump-Funktion aus symfony/var-dumper, und dort werden diese inline-styles tief im Innern des JS-Codes gesetzt: https://github.com/symfony/var-dumper/blob/92a342cd476603a3e8404bc802626df14da46e93/Dumper/HtmlDumper.php#L351

Danke für den Link.

Die betreffende Stelle steht dort im Code in Zeile 160.
Dann müsste man da wohl ein issue posten. ;-)

Die Frage ist allerdings wie. Die haben keinen Issue-Bereich, wo man was posten könnte.

@staabm
Copy link
Member

staabm commented Jan 20, 2023

@oioix
Copy link
Author

oioix commented Jan 22, 2023

Danke. Ich werde es dort posten.

@oioix
Copy link
Author

oioix commented Jan 22, 2023

Hab es dort gepostet.
symfony/symfony#49068

Kann hier geschossen werden. ;-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Core REDAXO Core related things
Development

No branches or pull requests

4 participants