Ergebnis 1 bis 14 von 14

Thema: CSP im FrontendController, nonce immer null

  1. #1
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.553
    User beschenken
    Wunschliste

    Standard CSP im FrontendController, nonce immer null

    Hi,
    ich versuche an die "nonce" ranzukommen in meinem FrontendController (AbstractFrontendModuleController) für ein <script> Abschnitt im Template.
    Dazu habe ich in der Startseite CSP aktiviert und als Policy angegeben:
    Code:
    default-src 'self' data:;
    script-src 'self';
    style-src 'self';
    Im Controller habe ich das mit folgendem Code Schnippsel aus der Template Klasse probiert:
    PHP-Code:
            $nonce null;
            
    $responseContext System::getContainer()->get('contao.routing.response_context_accessor')->getResponseContext();

            if (
    $responseContext?->has(CspHandler::class))
            {
                
    $csp $responseContext->get(CspHandler::class);
                
    $nonce $csp->getNonce('script-src');
            } 
    Leider ist hier $nonce immer "null", weil die "if" Bedingung "false" ist.

    Wie geht es richtig?
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Warum System::getContainer()?

    Ist dein Controller ein ESI Fragment?
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.553
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Warum System::getContainer()?

    Ist dein Controller ein ESI Fragment?
    1. Weil ich es wie gesagt erstmal aus der Template Klasse rauskopiert habe, da ich da nicht das ganze inline Script generieren lassen wollte sondern nur den nonce Anteil.
    2. Ja, ein ESI Fragment. (renderer: esi)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Zitat Zitat von BugBuster Beitrag anzeigen
    2. Ja, ein ESI Fragment. (renderer: esi)
    Im Kontext eines ESI Requests steht dir kein Contao Response Context zur Verfügung, den gibt es nur im Main Request.
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.553
    User beschenken
    Wunschliste

    Standard

    Na toll, wieder so ein Nachteil von Abstract Controller in Verbindung mit ESI.
    Habe aufgehört zu zählen, auf wie viele Probleme ich damit schon gestoßen bin in den letzten Jahren.
    Da hätte ich doch auf der alten Methode mit mehreren Insert-Tags bleiben sollen.

    Damit ist dann Visitors teilweise nicht kompatibel mit CSP. Zum Glück bleiben die Basis Funktionen erhalten, da ohne JS.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Warum lässt du überhaupt inline JavaScript via ESI ausgeben? Ändert sich das bei jedem Request oder unter anderen Bedingungen?

    Generell gilt, dass man, wenn man CSP nutzen möchte, inline Styles und inline JavaScript vermeiden sollte. nonces sind ein Behelfsmittel, wenn es nicht anders geht.
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.553
    User beschenken
    Wunschliste

    Standard

    Die Gesamte Ausgabe vom Visitors Frontend Modul ist ESI, da es sowohl die Zählung als auch gleich die Ausgaben macht, damit ich nur einen Request brauche, statt wie damals mit 10 Insert-Tags.
    Es darf ja nicht gecached werden. Da bot sich bei der Umstellung eben ESI an.

    Ich wüsste jetzt nicht wie ich das Aufteilen sollte. (Außer zwei FE Module dafür zu nutzen, eins ESI das andere nicht für den JS Anteil.)



    Nebenbei, ich habe gesehen, das bei jedem Request sich das Nonce Hash ändert und an den entsprechenden Stellen in HTML dann eingetragen wird `<script ... nonce=...>'
    Ist dann die Seite überhaupt noch cachebar?
    Geändert von BugBuster (21.03.2024 um 00:37 Uhr)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Warum darf das inline JavaScript nicht gecached werden? Muss es überhaupt inline sein?

    Und ja, die Response ist cachebar, da ja die gesamte Response inkl. Header gecached wird.
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.553
    User beschenken
    Wunschliste

    Standard

    Weil ich Teile vom JavaScript erstzen muss, die URL die Aufgerufen werden soll (Ajax), die ist bei jeder Seite anders.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Zitat Zitat von BugBuster Beitrag anzeigen
    Weil ich Teile vom JavaScript erstzen muss, die URL die Aufgerufen werden soll (Ajax), die ist bei jeder Seite anders.
    Und die kann nicht Client Seitig ermittelt werden?
    » sponsor me via GitHub or PayPal or Revolut

  11. #11
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.553
    User beschenken
    Wunschliste

    Standard

    nein, die URL hat 3 Paramater, die Kategorienummer des angelegten Zählers, die Page ID und ein Merker ob die Seite Protected ist oder nicht.
    Ich lasse die komplette URL im Modul generieren und übergebe das mit an das Template und dort wird dann der Teil über die Variable ersetzt.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Wenn es nur um Variablen geht, dann kannst du das ja per data Attributes ausgeben lassen.

    Wie gesagt - wenn man CSP aktivieren möchte, sollte man inline JavaScript möglichst immer vermeiden.
    » sponsor me via GitHub or PayPal or Revolut

  13. #13
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.553
    User beschenken
    Wunschliste

    Standard

    Das wäre eine Idee, mal sehen wann ich Zeit dazu finde das mal auszutesten.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  14. #14
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.553
    User beschenken
    Wunschliste

    Standard

    Die Kombination aus "nicht mehr inline" und Data Attributen sieht gut aus.
    Noch ein wenig testen und es wir eine neue Version kommen.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •