Wir verwenden die folgenden CSP-Header:Content Security Policy (CSP) - sichere Verwendung von unsicheren Tests?
default-src 'self' *.ourdomain.com; script-src 'self' *.ourdomain.com 'sha256-[...]' 'unsafe-eval';
connect-src 'self' *.ourdomain.com;
style-src 'unsafe-inline' * 'self' data:; font-src *;
img-src * 'self' data:
Die Empfehlung von unserem Sicherheitsteam nicht unsicher-eval ist zu verwenden.
Meine Frage ist: solange wir sha256 verwenden - [...] jedes Skript zu beschränken, die wir selbst nicht bereitgestellt haben, was das Sicherheitsrisiko von noch ist unsicher-eval in der Aufbewahrung CSP-Header? In welcher Situation würde uns das noch Cross-Site-Attacken aussetzen?
Es gibt einen Grund: Leistung. Es ist fast unmöglich, einen Interpreter zu erstellen, der so schnell ist wie kompilierter Code. Die Verwendung von 'eval()' ermöglicht einen schnelleren Code in Fällen, in denen der Code von einigen Laufzeitdaten abhängt. Bei einem spezifischeren Anwendungsfall sollten Sie eine Site in Betracht ziehen, bei der der Benutzer eine URL an Daten und einen beliebigen Ausdruck an diese Daten liefert. Der Ausdruck müsste millionenfach ausgewertet werden. Interpretieren Sie es (z. B. Ausdruck "abc" wird in ein Array ['a', 'b', 'c'] umgewandelt, und Schleife für den Zugriff Kind eines Kindes eines untergeordneten Objekts) ist deutlich langsamer als x = eval (' (a) => abc ') und rufe x (a) auf. – Yurik
@yurik ja, Leistung ist absolut ein Grund. Ich habe keine Daten, um es zu untermauern, aber ich denke, dass der Leistungsgewinn in vielen Fällen nicht sinnvoll ist. Früher haben Leute JSON ausgewertet, anstatt es zu analysieren, aber der Trade war für viele einfach nicht wert. – oreoshake
Ich denke, Eval (JSON) und JSON.Parse() sind in der Leistung vergleichbar, aber wenn Sie einen großen JSON haben, bin ich sicher, eine manuelle Analyse (ohne JSON.Parse) wäre viel langsamer. – Yurik