Pegjs: Fügen Sie eine Nicht-Eval-Alternative für die Kompatibilität mit Inhaltssicherheitsrichtlinien hinzu

Erstellt am 24. Okt. 2019  ·  12Kommentare  ·  Quelle: pegjs/pegjs

Refactoring: "eval" aus der Bibliothek entfernen

  • Fehlerbericht: Inhalts-Sicherheits-Richtlinie

Voraussetzungen

  • **Können Sie das Problem reproduzieren?: JA
  • **Haben Sie die Repository-Probleme durchsucht?: JA
  • **Hast du die Foren überprüft?: nein
  • **Haben Sie eine Websuche durchgeführt (Google, Yahoo usw.)?: Ja

Beschreibung

Schritte zum Reproduzieren

1.Server-Set-Header: Content-Security-Policy: default-src https:

  1. Vendor.js auf den Client laden
  2. Versuch, .parse() mit pegjs zu erstellen:
    Fehler (Chrome-Entwicklungstools): Die Ausführung eines Inline-Skripts wurde abgelehnt, da es gegen die folgende Richtlinie der Inhaltssicherheitsrichtlinie verstößt: "script-src 'self' 'unsafe-eval'". Zur Aktivierung der Inline-Ausführung ist entweder das Schlüsselwort 'unsafe-inline', ein Hash ('sha256-NALaJ5yL9XVYFNSX8jAdayjJGG7VDRjzVeu1AYf0Kx0=') oder eine Nonce ('nonce-...') erforderlich.

Software

  • PEG.js: ^0.10.0
  • Node.js: 8.12
  • NPM oder Garn: 6.41
  • Browser: Chrome 77, Safari, Firefox
  • Betriebssystem: Mac OS, Ubuntu
discussion feature not-a-bug task

Hilfreichster Kommentar

Ich denke, es lohnt sich, eine Nicht- eval Alternative hinzuzufügen, um die Kompatibilität mit der Inhaltssicherheitsrichtlinie zu gewährleisten. wird dies irgendwann vor 0.12 untersuchen, indem es ein weiteres Bundle (möglicherweise mit dem Namen dist/peg.csp.js ) über eine neue Eintragsdatei hinzufügt, die nur von Webpack verwendet wird

Alle 12 Kommentare

Bei pegjs sieht das nicht nach einem Problem aus.
Laden Sie Ihre Skripte von einer unsicheren Quelle (http?)

Ich kann dies auf den Protokollen http und https reproduzieren. Es geht um Sicherheitspolitik. Wenn der Code die eval-Funktion verwendet, wird er nicht ausgeführt, der Browser blockiert seine Ausführung
Ich habe einen Workaround dafür, aber es ist nicht sicher.
Weitere Details zur Sicherheitsrichtlinie:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy

Ihr Link ist für http-Header. Sie haben die Kontrolle über alle Header, die Sie an Ihren Server senden.

Ja, dieser Header bezieht sich auf Sicherheit, aber welche Anwendung im Jahr 2020 wird nicht an Sicherheit denken. Es ist durchaus üblich, diesen Ansatz in einer modernen Webanwendung zu verwenden.
Ich habe ein bisschen gegoogelt und festgestellt, dass beliebte Bibliotheken dieses Update bereits gemacht haben.
Ich glaube daher nicht, dass viele Anwendungen die Sicherheit in Zukunft ignorieren und geeignete Tools auswählen, die damit vereinbar sind.

Pegjs ist ein Parser-Generator, es ist eine Art separater Art von JS-Libs.
Wie würde JS innerhalb der Grammatik funktionieren, ohne dass eval sie verwendet hätte?

Ich glaube nicht, dass das eine gute Lösung für einen Parser-Generator ist. Leistung ist hier schließlich ziemlich wichtig.

Mir fehlt der Kontext in dieser Ausgabe. Kann jemand mit dem Finger auf einen relevanten Code zeigen?

Ich denke, es lohnt sich, eine Nicht- eval Alternative hinzuzufügen, um die Kompatibilität mit der Inhaltssicherheitsrichtlinie zu gewährleisten. wird dies irgendwann vor 0.12 untersuchen, indem es ein weiteres Bundle (möglicherweise mit dem Namen dist/peg.csp.js ) über eine neue Eintragsdatei hinzufügt, die nur von Webpack verwendet wird

Machen Sie es wahrscheinlich nicht nur webpack. Dieses Problem ist nicht webpack-spezifisch, und Webpack ist schnell rückläufig, zugunsten von Rollup und Paket

Ehrlich gesagt gibt es keinen besonderen Grund, eval beizubehalten, wenn eine Alternative angeboten wird. Es ist nicht so, als wäre es irgendwie schneller, wie oben seltsam angedeutet. Ganz im Gegenteil

Dies sollte nicht als not-a-bug . Tatsächlich handelt es sich um einen schwerwiegenden Fehler.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen