Ergebnis 1 bis 13 von 13

Thema: Content-Security-Policy (CSP) richtig implementieren

  1. #1
    Contao-Nutzer
    Registriert seit
    13.12.2013.
    Beiträge
    103

    Standard Content-Security-Policy (CSP) richtig implementieren

    Hey liebe Community,
    wir versuchen, unsere Websites auf ein A+ bei der Sicherheitsbewertung zu bekommen (bspw. https://securityheaders.io). Von der Grundinstallation von Contao 4.13 aus ist die Bewertung schon echt gut mit "A". Für das Plus fehlt aber noch die Content-Security-Policy, sagt er.

    Online konnte ich nur das hier finden:
    https://github.com/contao/contao/issues/1174

    Da bekomme ich in der Bewertung dann aber:
    Code:
    This policy contains 'unsafe-inline' which is dangerous in the default-src directive.
    Leider konnte ich nirgends eine einfache Anleitung finden, wie man Contao mit dem CSP-Header richtig absichert. Der Weg über nelmio_security scheint mir plausiebel, aber eigentlich müsste der doch strenger eingestellt sein, als auf Github beschrieben.

    Die contao.org bekommt ein A+ ohne diese Warnung. Kann mir vielleicht jemand einfach hier posten, was dort für Einstellungen vorgenommen werden? (Grundsätzlich wäre natürlich um so cooler, wenn Contao diese Einstellungen schon von Haus aus fertig eingebaut hätte

    DANKE EUCH!

  2. #2
    Contao-Fan Avatar von BennyBorn
    Registriert seit
    10.06.2011.
    Ort
    Edenkoben
    Beiträge
    268
    Partner-ID
    6916

    Standard

    Ich hatte mir das Thema für unsere eigene Seite auch einmal angesehen.
    Ein A+ scheint mir so nicht ganz möglich weil im Backend einige Inline-Skripte vorkommen die dann durch eine entsprechende Policy ausgehebelt würden.

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

    Standard

    Ich denke die Sicherheitsbewertung würde ohnehin nur für das Frontend (ohne Login) gelten. In so fern kann man mit einem kernel.response Event Listener die entsprechenden CSP Header setzen. Allerdings wird man ein paar Anpassungen benötigen. Bspw. wirst du bei inline <script> auch die Nonce hinzufügen müssen (kann man sich aus einem Service vom Nelmio Security Bundle holen).
    » sponsor me via GitHub or PayPal or Revolut

  4. #4
    Contao-Nutzer
    Registriert seit
    13.12.2013.
    Beiträge
    103

    Standard

    Das hört sich sehr kompliziert an ^^

    CSP sollte doch mittlerweile schon irgendwie Standard sein, oder? Könnte man das nicht besser in Contao von Grund auf implementieren?

    Und falls nicht, oder bis dahin, hätte jemand eine einfache Schritt-für-Schritt-Anleitung, wie man vorgehen muss?

  5. #5
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.198
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Also wenn es "Standard" sein sollte (wie definierst du das?), dann ein Standard, den derzeit nur ein ziemlich kleiner Bruchteil aller existierenden Websites erfüllt.
    Beachte auch den Unterschied zwischen "Das ist Standard" und "Das ist ein Standard". Das Erstere heißt für mich, "das" ist etwas, was die große Mehrheit so macht bzw implementiert. Also z.B. Wordpress zu benutzen . Das Letztere ist etwas eher Abstraktes, man muss irgendwelche Vorgaben/Bedingungen erfüllen, um seine Website irgendwie (z.B. "securityheaders.io A+") nennen zu dürfen, siehe auch DIN/ISO Standards. Also: Nur weil etwas ein Standard ist, ist es noch lange nicht Standard. Das heißt für mich: CSP ist ein Standard, aber noch lange nicht Standard.

  6. #6
    Contao-Nutzer
    Registriert seit
    30.04.2010.
    Beiträge
    31
    Partner-ID
    xenbyte

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ich denke die Sicherheitsbewertung würde ohnehin nur für das Frontend (ohne Login) gelten. In so fern kann man mit einem kernel.response Event Listener die entsprechenden CSP Header setzen. Allerdings wird man ein paar Anpassungen benötigen. Bspw. wirst du bei inline <script> auch die Nonce hinzufügen müssen (kann man sich aus einem Service vom Nelmio Security Bundle holen).
    Müsste das nicht mit den Twig-Templates relativ einfach funktionieren? Zumindest bei reinen Symfony-Projekten brauche ich dafür ja nur

    Code:
    <script nonce="{{ csp_nonce('script') }}">
    // hier dann der JS-Code
    </script>
    verwenden. Habe bislang aber kein Contao-Projekt mit Twig-Templates umgesetzt und weiß nicht, ob das da dann auch so komfortabel funktioniert.

    Bei SecurityHeaders komme ich sogar auf ein A+, weil ich weder default-src, noch script-src oder style-src festgelegt habe. Da ist https://observatory.mozilla.org/analyze/ doch etwas strenger.

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

    Standard

    Ja, für Twig liefert das Nelmio Security Bundle eine Extension. Die Contao Core JavaScript Templates (wenn man die verwendet) sind aber nicht mit Twig umgesetzt.
    » sponsor me via GitHub or PayPal or Revolut

  8. #8
    Contao-Nutzer
    Registriert seit
    13.12.2013.
    Beiträge
    103

    Standard

    Sehe ich das also richtig, dass bisher keiner hier seine Contao-Installation mit CSP schützt und daher auch niemand eine einfache Anleitung dazu posten kann?

  9. #9
    Contao-Nutzer
    Registriert seit
    30.04.2010.
    Beiträge
    31
    Partner-ID
    xenbyte

    Standard

    Auch ohne das A+ sind die Contao-Installationen ja nicht grundsätzlich unsicher. Wenn sich jemand unbefugtes Zugriff zum Backend verschafft und dort gefährlichen JavaScript in die Templates o. ä. einschleust, würde auch für den gefährlichen Code ein nonce generiert werden. Ansonsten habe ich meine Contao-Installationen habe ich die Security-Header größtenteils noch über die Nginx-Konfiguration konfiguriert.

    Ein guter Anlaufpunkt ist die GitHub-Seite von NelmioSecurityBundle, in der auch Konfigurationsbeispiele genannt sind, die Du in die config/config.yml übernehmen kannst. default-src none sorgt erst mal dafür, dass quasi gar nichts erlaubt ist. Bei einer produktiven Umgebung wäre das natürlich erst mal hart, weswegen die Einstellungen am besten erst mal im report-Block statt im enforce-Block vorgenommen werden sollten. Für die Reports könnte ich u. a. https://report-uri.com/ (stammt wie auch SecurityHeaders.com von Scott Helme und kann für bis zu 3 Domains kostenlos genutzt werden) empfehlen. Das kann etwas dabei unterstützen, die richtigen Einstellungen vorzunehmen.

    Hilfreich wäre es natürlich, keine inline-Scripts (nach Möglichkeit in .js-Dateien auslagern) oder inline-Styles (gehört m. E. alles in eine .css-Datei) zu haben, dann ist hier auch kein unsafe-inline erforderlich und das A+ wäre recht einfach zu erreichen. Ansonsten bietet Contao von Haus aus keine Möglichkeit, nonce-Werte für Scripts zu verwenden - außer halt bei den Twig-Templates, weswegen das mit Contao 5 vielleicht einfacher werden könnte. Wie so ein Block in einem Twig-Template aussieht, habe ich ja zuvor gepostet.

  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 av3nger Beitrag anzeigen
    Ein guter Anlaufpunkt ist die GitHub-Seite von NelmioSecurityBundle, in der auch Konfigurationsbeispiele genannt sind, die Du in die config/config.yml übernehmen kannst.
    Das Nelmio Security Bundle kann man dafür leider nicht verwenden, da sich das dann auch auf das Backend auswirken würde. Und manche Policies würden das Backend dann funktionsunfähig machen.
    » sponsor me via GitHub or PayPal or Revolut

  11. #11
    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 av3nger Beitrag anzeigen
    Ansonsten bietet Contao von Haus aus keine Möglichkeit, nonce-Werte für Scripts zu verwenden
    Kannst du dir aber vom nelmio_security.csp_listener holen, bspw. über einen parseTemplate Hook.
    » sponsor me via GitHub or PayPal or Revolut

  12. #12
    Contao-Nutzer
    Registriert seit
    30.04.2010.
    Beiträge
    31
    Partner-ID
    xenbyte

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Kannst du dir aber vom nelmio_security.csp_listener holen, bspw. über einen parseTemplate Hook.
    Müsste das nicht eigentlich wie folgt funktionieren?

    PHP-Code:
    System::getContainer()->get('nelmio_security.csp_listener'); 
    Wenn ich das (unter Contao 4.13) versuche, erhalte ich nämlich leider nur die Meldung

    Code:
    request.CRITICAL: Uncaught PHP Exception Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException: "The "nelmio_security.csp_listener" service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead."
    contao-console debug:container gibt den Container zurück.

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

    Standard

    Das geht nicht, weil dieser Service nicht public ist.
    » sponsor me via GitHub or PayPal or Revolut

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
  •