Warum wird dieses Inline-JavaScript nicht durch die Inhaltssicherheitsrichtlinie blockiert?

8

Ich habe eine Seite, die ich das Skript-src der Inhaltssicherheitsrichtlinie wie folgt festlegen:

%Vor%

Wenn ich die Seite mit einem hartcodierten Inline-Skript lade, das ich selbst zum Testen erstellt habe, wird es wie erwartet blockiert:

  

Es wurde abgelehnt, ein Inline-Skript auszuführen, da es gegen Folgendes verstößt   Richtlinie zur Inhaltssicherheitsrichtlinie: "script-src 'self'   * .uservoice.com * .intuit.com ajax.googleapis.com localhost: * ". Entweder das 'unsafe-inline' Schlüsselwort, ein Hash ('sha256 -...') oder ein Nonce   ('nonce -...') ist erforderlich, um die Inline-Ausführung zu aktivieren.

Wenn ich jedoch ein neues Skript-Tag dynamisch einfüge, wird das Skript nicht blockiert, zum Beispiel wird es weiterhin ausgeführt:

%Vor%

Ich verwende Chrome als Browser zum Testen. Ich hatte gehofft, dass dieses Skript ebenfalls blockiert würde, da dies wirklich helfen würde, XSS zu verhindern. Gibt es etwas, das ich ändern kann, um diese Art von Skript-Injektion zu blockieren?

    
user3152280 21.07.2014, 00:03
quelle

1 Antwort

2

Das Skript, das Sie mit append oder innerHtml hinzufügen, wird nur ausgeführt, wenn Sie eval() verwenden. Es verletzt also nicht CSP.

  

Obwohl dies wie ein Cross-Site-Scripting-Angriff aussieht, ist das Ergebnis harmlos. HTML5 gibt an, dass ein via innerHTML eingefügtes Tag nicht ausgeführt werden soll. 1

Siehe Skriptelemente, die mit innerHTML eingefügt wurden, werden beim Einfügen nicht ausgeführt.

    
Sheng 06.08.2014 22:34
quelle