Ich arbeite an einem Szenario, in dem einige JavaScript-Dateien auf einem CDN gehostet werden sollen. Ich möchte einen Mechanismus haben, damit ich beim Herunterladen dieser Dateien auf der Benutzerseite sicherstellen kann, dass die Dateien nicht manipuliert wurden und tatsächlich vom angegebenen CDN stammen.
Ich verstehe, dass die Aufgabe sehr einfach ist, wenn ich SSL verwende, aber ich möchte trotzdem sicherstellen, dass die richtigen Dateien auch auf HTTP ohne SSL bereitgestellt werden.
Soweit ich suchen konnte, gibt es keinen Mechanismus wie die digitale Signatur für JavaScript-Dateien, der plattformübergreifend unterstützt wird. Vielleicht wird es nicht benötigt?
Ist in Browsern eine Methode integriert, mit der der Autor der JavaScript-Dateien überprüft werden kann? Kann ich irgendetwas tun, um dies auf sichere Weise zu tun?
quelle
Antworten:
Tatsächlich wird eine solche Funktion derzeit unter dem Namen Subresource Integrity entworfen . Schauen Sie sich das
integrity
Attribut des<script>
Tags an. Obwohl es noch nicht vollständig angenommen wurde , erfüllt es genau diesen Zweck.Quelle
Quelle
Beispiel:
Beachten Sie jedoch, dass dies Sie nicht vor Man in the Middle-Angriffen schützt, wenn Sie Ihre Ressourcen über einfaches HTTP übertragen. In diesem Fall kann der Hash-Code vom Angreifer gefälscht werden, wodurch die Verteidigung gegen manipulierte Skriptdateien unbrauchbar wird.
Aus diesem Grund sollten Sie zusätzlich zu den oben beschriebenen Sicherheitsmaßnahmen immer sichere HTTPS-Verbindungen anstelle von einfachem HTTP verwenden.
quelle
https://code.jquery.com/
jeder, der Kompromissecode.jquery.com
eingeht, Ihre Site mit XSS versehen, unabhängig davon, obcode.jquery.com
über HTTPS auf sie zugegriffen wird oder nicht . Mit diesen Überprüfungen kann der Angreifer das Laden der Skripte nur verhindern und nicht durch böswillige ersetzen.Sie suchen nach Integritätsprüfungen für Unterressourcen .
Hier ist zum Beispiel das jQuery-CDN-Snippet:
quelle
code.jquery.com
. Dies kann Sie vor einer Gefährdung schützencode.jquery.com
.Haftungsausschluss: Wie immer sollten Sie diese Mechanismen nur bei der Verwendung von https als nützlich erachten, da sie über MitM mit http problemlos deaktiviert werden können
Zusätzlich zu dem Mechanismus in den obigen Antworten können Sie auch die http-Antwortheader der Inhaltssicherheitsrichtlinie auf der übergeordneten Seite verwenden.
http://www.html5rocks.com/de/tutorials/security/content-security-policy/
Dieser Mechanismus gibt es schon seit einiger Zeit, daher ist die Browserunterstützung wahrscheinlich ziemlich gut. Überprüfen Sie dies unbedingt.
Wenn Sie außerdem sicherstellen möchten, dass ältere, nicht kompatible Browser nicht unsicher sind, können Sie oben auf der Seite ein synchrones Umleitungsskript einfügen, das von der Richtlinie nicht zugelassen wird.
quelle
Es gibt einen wichtigen Punkt darüber, was diese Art der Unterzeichnung kann und was nicht. Es kann den Benutzer vor hypothetischen Angriffen schützen, bei denen jemand Ihren Code ändert. Es kann Ihrer Site nicht versichern, dass Ihr Code der ausgeführte Code ist. Mit anderen Worten, Sie können immer noch nichts vertrauen, was vom Client auf Ihre Website gelangt.
quelle
Wenn Ihr gegnerisches Modell einem Angreifer erlaubt, JavaScript-Dateien so zu ändern, wie sie von einem CDN übermittelt werden, erlaubt Ihr gegnerisches Modell einem Angreifer, die übermittelte verweisende Quelle zu ändern, um jeden Überprüfungsversuch zu entfernen und die Quelladresse in eine andere als zu ändern das CDN und / oder den Verweis auf das JavaScript vollständig zu entfernen.
Lassen Sie uns nicht die Dose mit Würmern öffnen, mit denen Ihre Anwendung feststellen kann, ob der Resolver des Benutzers über HTTP-Anforderungen (oder einen anderen Mechanismus ohne überprüfte Vertrauenskette) korrekt in das CDN aufgelöst wird oder nicht.
/ etc / hosts:
quelle
Sie können dies mit Subresource Integrity sicherstellen. Viele öffentliche CDNs enthalten SRI-Hashes im einbettbaren Code, der auf CDN-Websites angeboten wird. Wenn Sie beispielsweise auf PageCDN auf der jQuery-CDN- Seite auf jquery file klicken , können Sie entweder die URL kopieren oder das Skript-Tag verwenden, das den folgenden SRI-Hash enthält:
Beim Laden der Seite gibt der Browser eine Anforderung für diese Ressource aus und nach Abschluss der Anforderung wird der Hash der empfangenen Datei mit dem Hash abgeglichen, der als Integritätswert im Skript-Tag angegeben ist. Wenn beide Hashes nicht übereinstimmen, verwirft der Browser die JQuery-Datei.
Derzeit wird diese Funktion von 91% der Browser weltweit unterstützt. Weitere Details zu caniuse .
quelle