visforms und CSP (Content-Security-Policy)

  • Joomla Version
    5.0.2
    PHP Version
    PHP 8.3.x
    Hoster
    selbst
    Link (URL) zur Seite mit dem Problem
    https://makerspacebonn.de/index.php/der-verein/anmeldung-zu-workshops

    Hallo ,

    ich habe mit visforms (Ohne Subscription) ein Formular zu Anmeldung für unsere Workshops erstellt.
    https://makerspacebonn.de/index.php/der-…ng-zu-workshops

    Leider kann ich den submit Button nicht bestätigen

    Auf der Konsole dieht man folgende Eintragungen:
    Content-Security-Policy: Die Einstellungen der Seite haben das Laden einer Ressource auf inline blockiert ("script-src").

    Content-Security-Policy: Die Einstellungen der Seite haben das Laden einer Ressource auf inline blockiert ("style-src").

    Die CSP Eintragungen sind wie folgt (Plugin: System – HTTP Headers)

    Kann mir einen Tip geben, warum visforms blockiert wird, denn das script läuft ja auf dem eigenen Server


  • Kann mir einen Tip geben, warum visforms blockiert wird, denn das script läuft ja auf dem eigenen Server

    Ja, aber deine Einstellungen verbieten jegliche Form von "ungenonceten" Inline-Skripten und da gibt es eine Menge (siehe Bild).

    Ich kenne Visforms nicht. Eigentlich sollte das das richtig machen, also das Skript "noncen", (wenn Nonces aktiviert sind im Plugin). Mit Joomla eigentlich kein Problem. Vielleicht hat visforms eine Einstellung der Art "Im HEAD einbinden" oder so ähnlich?

    Umschiffen kann man das Problem mit einem weiteren Attribut 'unsafe-inline', aber das ist unwirksam, wenn Nonces aktiviert sind. Blöde Geschichte.


  • Als Erweiterungsprogrammierer, der seinerzeit seine eigenen Erweiterungen und Kundenseiten umfeilen musste, kann ich nicht mehr dazu sagen.

    Wenn Visforms den von mir gezeigten Block nicht anderweitig in die Seite einsetzt, und Nonces aktiviert sind, funktioniert es halt nicht. Bzw., wenn du sagst, es gibt keine einstellung in Visforms.

    Testen kannst ja, indem du das HTTP-Plugin mal deaktivierst.

  • Die Visforms Entwickler nutzen nicht die von Joomla vorgesehenen Methoden um JS und CSS an die Seitenausgabe anzuhängen (Stichwort "Web Asset Manager") sondern gehen ihren eigenen Weg. Dadurch kann Joomla keine passenden Nounces generieren und eine strikte CSP verhindert die korrekte Ausführung. Die richtige Lösung ist, dass Visforms ihre Ausgabe anpasst, die Alternative ist das Erlauben von unsafe-inline.

  • Na gut, wollte ich vermeiden, weil ich Visforms nicht so mag ;)

    Eine Krücke mit aktivierten Nonces, die ich desöfteren für "mal-eben-schnell"-Fixes sonstwo verwende. Am Template-Beispiel Cassiopeia.

    - Lege einen Override, also eine Kopie des JLayouts /com_visforms/layouts/visforms/scripts/validation.php an, also Datei

    Code
    /templates/cassiopeia/html/layouts/com_visforms/visforms/scripts/validation.php

    - Füge in diese Datei ein bzw. ergänze dann den <script>-Tag:

    Siehe Bild, wo ungefähr:

    Bei mir funktioniert das Formular dann und im Browser-Inspektor wird diesbzgl. nicht mehr gemeckert.

    Da du aber sowieso diverse Nonce-Fehler hast, was Inline-Scripte und Inline-Stile anbelangt, die VIELLECIHT wurst sind, ist zu überlegen, ob....

    EDIT: Das ist durchaus legitim das so zu machen, aber Visforms könnte das ab Joomla 4 eleganter machen. Da bin ich jetzt aber zu faul. Ginge auch in einem Override, wie oben erwähnt, mit dem WAM "easy".

  • Kenne Visforms nicht. Wegen dem roten Balken, was es da ev. für Einstellungen gäbe.

    Täte das quick and dirty:

    Code
    .alert.alert-danger.error-note {
    display: none;  
    }

    Allerdings weiß ich nicht, ob dieser doch nötig wäre, um einen eventuellen Fehler anzuzeigen (?)

    Liebe Grüße

    Christine

  • Da du aber sowieso diverse Nonce-Fehler hast, was Inline-Scripte und Inline-Stile anbelangt

    deshalb bekommt z.B. dieser rote und leere alert-Balken nicht das nötige CSS bzw. es ist dem Browser verboten, es auszuführen. eigentlich steht da nämlich (wenn Nonces deaktiviert sind und 'unsafe-inline' gesetzt ist):

    Code
    <div class="alert alert-danger error-note" style="display: none;"></div>

    Er ist also normalerweise versteckt, bis das Formular was anzuzeigen hat. Umgehen könnte das Visforms, wenn sie statt mit inline-styles mit CSS-Klassen arbeiten würden.