CSP Header

  • Gibt es eine Möglichkeit bei dem http-header Plugin CSP so zu konfigurieren, dass folgender Quellcode in meiner HTML Seite nicht durch CSP blockiert wird?

    Code
    <a href="#" onclick="Joomla.tableOrdering('a.title','asc','', document.getElementById('adminForm'));return false;" class="hasPopover" title="Titel" data-bs-content="Klicken, um nach dieser Spalte zu sortieren" data-bs-placement="top">Titel</a></th>

    Folgende Meldung erscheint bei mir im Browser:


    Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'sha256-hmMEB4F3qKwyT8K+qgB1+j+6OoiUOau5sIUZXCKy00I=' 'sha256-9uyDyXmtJBebsdn2MVXC/u/kOqV26Bj4InOMEH3NduI=' 'sha256-riby8x3MzLeY13IXpDUXA8uRDFlKZDw2coXeg5RioNw=' 'sha256-kkk7UFPifaxTsPMWjNthrrI8chzhf/A6JwZQIx2OWZQ=' 'sha256-Db02/d+QXbmQoiQWl1CWO1n/P5jzxK/cCCG2E+3Du/E=' 'sha256-uTzJbXT2OZ+i3brZpQRtX2ljvF20kooh0+xj8UqVmkg=' 'sha256-kpTl046LhNAq9+OLhMuMFLvmcshIDJh0gckdiNx4mTg=' 'sha256-wHgXkjx9JbmdiTCnfAVg8RuIHIFGjYD+9PCmQUEi/QI=' 'sha256-0hqKmZ4MbwnBZru2vULlbQNjT/nTkuA03ZyzU2Ma3uo=' 'sha256-/2mjxHM5fooVdHxefck4LDhZ5wX23qiZZ+iEXEEYUsE=' 'sha256-iSiXTnKxB14GOEuFVWDM9h4iFmiWBY8HZMK5ntHz+bs=' 'sha256-JpEJvERr7rpBCFaFf4miiP4dkFqrxGd5H0AgkCb5ZQg=' 'sha256-Zk/Yu9AbwnGwUQH7ojsjjJRuuSpnEzOFL70VJq2Pnbs=' 'sha256-UZzUZxjcSjpOj8hQzu/k2m4CVfafH5PLSwEmGC/8huI=' 'sha256-C0yqH6ZxP/7Bz3OnkH1Hh+QQq2v/mMnI4HBQ8kv/8Do=' 'sha256-wiBZL5Mf8qnRAj4L/TDAAI4ILhhVmPfjg1rTB9mb6EY=' 'sha256-s5hcciyMX0W9lpHiZO/6ridFt6g10oqPKrtQ46daJs0=' 'sha256-2vuER6Lq6jFCOOUH+wOYB/miOC1d12UeUj6eUItHeDo=' 'sha256-9bVGpM8Osg/eKTKibjtv7Mh9IbkD/ul8hf9BX8RydHI=' 'sha256-8KNovAql8ptxdCCSjKqHVJO1jLg3lJ9P+w4H211PJB0=' 'sha256-IZ55lKr0UJxotWYdztmHiAYh3cSoU9XsK6KKIRgUPyk=' 'sha256-cMHdua5T1nBK2UWIbCEQsoz/eG73vbCp+YXBdjlokVI=' 'sha256-E1V8nFo6D7tomecnJtjLKwx4FHn/YNKFSZrFst0Zw54=' 'sha256-IZ55lKr0UJxotWYdztmHiAYh3cSoU9XsK6KKIRgUPyk=' 'sha256-cMHdua5T1nBK2UWIbCEQsoz/eG73vbCp+YXBdjlokVI=' 'sha256-qwQ9tfNIe2D55Me+TzkXJCffauS1L+E4CJ4s4r5/AAY=' 'sha256-8YOYIdSiFF9svc65gS9B72qsI8nOp8Y/tMonc+gKdQw=' 'sha256-iF6Nkq0YYga6Gefe2TzSEQ0NEdV3OGbD3BksnxT71mQ=' 'sha256-aRXC8Xk+yedBLMtvedNUQRZny1J6hGnifNuENpA5N2I=' 'sha256-aRXC8Xk+yedBLMtvedNUQRZny1J6hGnifNuENpA5N2I=' 'self' https://connect.facebook.net/de_DE/ https://platform.linkedin.com/ https://platform.twitter.com/ https://www.google-analytics.com https://www.googletagmanager.com/ https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/ https://freetools.seobility.ne…check/friededenhuetten.de https://www.googletagmanager.com/gtag/". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present.

  • Da bin ich als Depp schon Stunden im Kreis gelaufen. Die einzige Lösung, die ich bisher gefunden habe, ist Nonces auszuschalten und natürlich 'strict-dynamic', und eine Regel


    script-src: 'unsafe-inline' etc.


    hinzuzufügen.


    Oder die onclick-Codes eben nicht an dieser Stelle inline zu verwenden, was aber Joomla so in Kategorielisten einsetzt und ich eigentlich als einen """Joomla-Bug""" ansehe, wenn man dann andere Sicherheits-Einstellungen nicht verwenden kann.


    Varainten wären, das in eine Javascript-Datei auszulagern, die dann unter Kategorie 'self' fällt; oder eben in HEAD mit einer joomla-konformen Methode, die dazu die Nonces einsetzt bzw. vom Plugin eingesetzt bekommt.


    Aber, da ich wie gesagt, eher ein Depp bin, traue ich mich noch mal zero24 anzupingen, wie er das sieht. Falls er Zeit und Lust hat. Ob da vielleicht Joomla ein grundlegendes Manko hat.

  • Ich habe einmal die Beschreibung der CSP Direktiven nachgelesen. Dort findet man:


    Zitat

    The HTTP Content-Security-Policy (CSP) script-src-attr directive specifies valid sources for JavaScript inline event handlers. This includes only inline script event handlers like onclick, but not URLs loaded directly into <script> elements.

    CSP version3
    Directive typeFetch directive
    default-src fallbackYes. If this directive is absent, the user agent will look for the script-src directive, and if both of them are absent, fallback to default-src directive.

    Also genau das richtige. Allerdings habe ich bei der Konfiguration im http-header festgestellt, dass ich denselben Fehler bekomme, wenn ich 'unsafe-hashes', 'unsafe-inline', 'unsafe-eval' oder 'self' benutze. Das Plugin http-header schreibt immer die hashes aus der script-src Direktive auch in die script-src-attr Direktive. Ist das so richtig oder der Grund für den Fehler?

  • Gibt es eine Möglichkeit bei dem http-header Plugin CSP so zu konfigurieren, dass folgender Quellcode in meiner HTML Seite nicht durch CSP blockiert wird?

    Jein. So wie Re:Later schon geschrieben hat nur durch: script-src 'unsafe-inline' oder via dedizierten hash. Das sind alles aber nur Behelfslösungen für die "richtige" Lösung komplett auf inline JS und CSS zu verzichten und diese Funktionalität in JS/CSS Dateien auszulagern.


    Das Plugin http-header schreibt immer die hashes aus der script-src Direktive auch in die script-src-attr Direktive. Ist das so richtig oder der Grund für den Fehler?

    Jein zeig mir einmal bitte deine CSP Konfiguration "automatisch" sollte das Plugin das nicht machen. Das Problem an script-src-attr ist das es nur in chromium Browsern verfügbar ist: https://caniuse.com/mdn-http_h…ty-policy_script-src-attr

    Da bin ich als Depp schon Stunden im Kreis gelaufen. Die einzige Lösung, die ich bisher gefunden habe, ist Nonces auszuschalten und natürlich 'strict-dynamic', und eine Regel


    script-src: 'unsafe-inline' etc.


    hinzuzufügen.

    Die Kombination sollte aber auch nicht funktionieren. Denn wenn nonces aktiviert sind wird unsafe-inline ignoriert und greift dann nur bei Browsern welche keine nonces unterstützen?


    :thumbup: Danke, das wäre vielleicht sehr hilfreich. zero24 kann besser beurteilen, ob man da etwas in die ToDo Liste für ein neues Joomla aufnimmt. Bis später dann.

    Ich denke es geht hier um das Backend? Der Fokus bei 4.0 wurde auf das Frontend gelegt und ja es gibt noch einige inline scripte im Joomla 4 backend aber die meisten sollten schon auf "nutzen die Joomla API" umgestellt worden sein und werden damit von hashes und nonces abgefangen aber ich möchte nicht ausschließen das es auch noch welche gibt die an der Joomla API vorbei gehen besonders auch 3rd party extensions können hier schnell querschießen

  • Zitat von zero24

    Jein zeig mir einmal bitte deine CSP Konfiguration "automatisch" sollte das Plugin das nicht machen. Das Problem an script-src-attr ist das es nur in chromium Browsern verfügbar ist: https://caniuse.com/mdn-http_h…ty-policy_script-src-attr


    Konfiguration:


    Vielleicht hilft dir das weiter.


    Hier noch die Konfiguration mit script-src-attr:


    Das liefert folgende Fehlermeldung:


    Zitat

    Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src-attr 'sha256-zFOPhgwnYGQYWbklvrt4LFRZEPSZf5uiQlxI/wRqG/w=' 'sha256-Nvln2/9s2bt91lnc/BTaguQLP9rmnxZpUSIhwbVDjmw=' 'sha256-BzMzodSbv5/ym+eJeCgxRf7kDN/WU9JWBhAonzSuRcU=' 'sha256-IZ55lKr0UJxotWYdztmHiAYh3cSoU9XsK6KKIRgUPyk=' 'sha256-cMHdua5T1nBK2UWIbCEQsoz/eG73vbCp+YXBdjlokVI=' 'sha256-E1V8nFo6D7tomecnJtjLKwx4FHn/YNKFSZrFst0Zw54=' 'unsafe-hashes'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.


    _handleMouseUp @ unbekannt

    Einmal editiert, zuletzt von Indigo66 () aus folgendem Grund: Ein Beitrag von gopitzohlsen mit diesem Beitrag zusammengefügt.

  • Die Kombination sollte aber auch nicht funktionieren. Denn wenn nonces aktiviert sind wird unsafe-inline ignoriert und greift dann nur bei Browsern welche keine nonces unterstützen?

    Hast du falsch gelesen. Ich schrieb

    Zitat

    Die ... Lösung ... ist Nonces auszuschalten und natürlich 'strict-dynamic'

    Also beide auszuschalten.


    Ich denke es geht hier um das Backend?

    zero24

    Ich nutze das Plugin natürlich nur im Frontend.


    Im Frontend Joomla 4 gibt es das core-seitige Inline-onclick-Javascript für das Sortieren von Tabellenspalten in Beitrags-Kategorielisten. Wie im ersten Post zu sehen. Das wurde wohl vergessen umzubauen(?)


    Das verhindert das Nutzen von Nonces.


    Ich habe das eingereicht, weil ich mir zwischenzeitlich fast sicher bin, dass das ein """Bugilein""" ist:

    [4] Http Headers plugin. Nonces on Category List · Issue #37799 · joomla/joomla-cms
    Steps to reproduce the issue Configure plugin &quot;Http Headers&quot; &gt; &quot;Content-Security-Policy (CSP)&quot; Nonce: Yes Add a &quot;Policy…
    github.com

  • Habe das jetzt händisch eingetragen:


    Code
    Unter script-src-attr:
    'unsafe-hashes' 'sha256-cbPytqlIqUc4AN1rFKg0VYyfT5hs9GBjknGeviK+fJ4=' 'sha256-cyFuHpNI8jCCL7LS0XTcV9vO3BNVya9M4YfpmGPf8yc=' 'sha256-AZkVvGbyhe5MxQNotx6cpde+HJT40fh9cfpIEXK0PMo='

    Wobei ich die Hashes von https://report-uri.com/home/hash nach folgender Tabelle berechnet habe:


    Zitat

    // inline event handlers auf friededenhuetten.de


    Joomla.tableOrdering('a.title','asc','', document.getElementById('adminForm'));return false; 'sha256-cbPytqlIqUc4AN1rFKg0VYyfT5hs9GBjknGeviK+fJ4='

    Joomla.tableOrdering('author','asc','');return false; 'sha256-cyFuHpNI8jCCL7LS0XTcV9vO3BNVya9M4YfpmGPf8yc='

    Joomla.tableOrdering('a.hits','asc','');return false; 'sha256-AZkVvGbyhe5MxQNotx6cpde+HJT40fh9cfpIEXK0PMo='

    Dies funktioniert jetzt. Allerdings meckert chrome immer noch, weil die CSP Direktive script-src verletzt ist. Muss die hashes dort wohl auch eintragen. Schön ist die Lösung natürlich nicht.

  • Nachdem ich die hashes in der script-src Direktive eingetragen habe, habe ich dasselbe Problem. Also muss es meiner Meinung nach folgendermaßen funktionieren: Ich kopiere alle Einträge in script-src nach script-src-attr und lösche script-src. Da in script-src-attr alle von http-header generierten hashes stehen, habe ich dann in script-src-attr alle hashes stehen, die vorher in script-src waren plus die selbst generierten hashes für die event handler. Das müsste dann hoffentlich ohne Fehler funktionieren. Melde mich diesbezüglich später noch einmal.

  • Ich komme in der Geschichte nicht richtig weiter. Zwar ist die Funktionalität der inline handler mit folgender Konfiguration der CSP header gegeben


    Aber Chrome spuckt immer noch Fehlermeldungen aus:

    Zitat

    Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'sha256-MnX+yvYe0JOq2pXGY3M5Gx7IIlDBZwpnnfu5NVzyGQA=' 'sha256-qwmtnyUYx6J0+6tc6wWQibdDocIbV4BxclgwNjgxspw=' 'sha256-PrmxEMA/23y/IjSp1CIQ8ElyQu9XXaQ8aYp6OdxbMms=' 'sha256-76aZGvIAUMMQotSxuAx8/amJFhf8JWpNYksoLknKC5E=' 'sha256-7WusujWU77FfmaEGN6KlLds61EIW4GdNLbbZxIjA0uQ=' 'sha256-hQABD38zThm73ayo/U4zlAbCgrjUnowAcyqw2DbWAVc=' 'sha256-TvjYMh6gWeYWBX4UY+/RpeqAZQrr6ir8ipRESBG+3zo=' 'sha256-vAy5Lsza4fTRoM8KsVCh/uGNkRXCO34Kh5KfAEREvi0=' 'sha256-Ox2+Kiwsb5IZLIZANx2UPn2ZuPM3QctR4LJSjAh6AcE=' 'sha256-6qELHuVZoBNJTG1BahQfKx8sFUk5J3ghHthhbsOK+/E=' 'sha256-B5qPCd3PL06xVPR5MNwY+ZWfzZ6W+Kg/M/aF7l+8UMg=' 'sha256-sfjT4wKh2CtvDhEfByC3RWGhIH2VdCz7VmUJeZpgLlk=' 'sha256-XDaHc2aPRRXbeA3KJiF9pxmK7Ec5mjs7S2Nmh5m7hOE=' 'sha256-T/TD6SQKuo8yjZyNtoQl3dwfunCnY2WOCrH6seq8i0A=' 'sha256-oYDrfyhRqUGm82YSyLkxnmH0WRjcu7ix7jUY9YSyt5c=' 'sha256-Zrv8GpJmB5XKAxuG8JPQx3sJs2HAflf8Pr9n0IXjXrE=' 'sha256-b3aPmQRc26sJsQo0QII3uhucW43OMrkLmHc1MrJ2aIk=' 'sha256-s693QbuN5bg6DTy3HAAPq+6NUDYIx5uuX0WH5UEItYU=' 'sha256-RT3zSRCPDYct4By38GKmVA9D4XEsMcjvmSONI0BAI7g=' 'sha256-xbZ8xjZhPKPIgK+28AqnYuh0eh39cjPfBGeY+DQVmCE=' 'sha256-IZ55lKr0UJxotWYdztmHiAYh3cSoU9XsK6KKIRgUPyk=' 'sha256-yqBO1UTlfZQRpJicA5eh+/XF8HWpxd4Yb/GcOC8/NjQ=' 'sha256-4+hLaYWdngZPbm3mCJDxKByo/QVNjuqlukUTUH8p/hM=' 'sha256-cMHdua5T1nBK2UWIbCEQsoz/eG73vbCp+YXBdjlokVI=' 'sha256-E1V8nFo6D7tomecnJtjLKwx4FHn/YNKFSZrFst0Zw54=' 'unsafe-inline' 'sha256-cbPytqlIqUc4AN1rFKg0VYyfT5hs9GBjknGeviK+fJ4=' 'sha256-cyFuHpNI8jCCL7LS0XTcV9vO3BNVya9M4YfpmGPf8yc=' 'sha256-AZkVvGbyhe5MxQNotx6cpde+HJT40fh9cfpIEXK0PMo=' 'sha256-IZ55lKr0UJxotWYdztmHiAYh3cSoU9XsK6KKIRgUPyk=' 'sha256-cMHdua5T1nBK2UWIbCEQsoz/eG73vbCp+YXBdjlokVI=' 'sha256-qwQ9tfNIe2D55Me+TzkXJCffauS1L+E4CJ4s4r5/AAY=' 'sha256-8YOYIdSiFF9svc65gS9B72qsI8nOp8Y/tMonc+gKdQw=' 'sha256-iF6Nkq0YYga6Gefe2TzSEQ0NEdV3OGbD3BksnxT71mQ=' 'sha256-aRXC8Xk+yedBLMtvedNUQRZny1J6hGnifNuENpA5N2I=' 'self' https://connect.facebook.net/de_DE/ https://platform.linkedin.com/ https://platform.twitter.com/ https://www.google-analytics.com https://www.googletagmanager.com/ https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/ https://freetools.seobility.ne…check/friededenhuetten.de https://www.googletagmanager.com/gtag/". Note that 'unsafe-inline' is ignored if either a hash or nonce value is present in the source list.

    Ziemlich undurchsichtig search , das Ganze. Aber es scheint zu funktionieren.