2013-12-12 7 views
5

Ich schreibe eine Webanwendung, die eine clientseitige Verschlüsselung von Daten durchführt, um sicherzustellen, dass ich nie sehen kann, was der Client an meinen Server sendet. Worüber ich wirklich besorgt bin, ist, wenn Dritte Zugriff auf meinen JavaScript-Code erhalten und dann eine Hintertür oder irgendeinen anderen bösartigen Code zu meiner JavaScript-Datei hinzufügen.Sicherstellen, dass JavaScript nicht manipuliert wurde

Da JavaScript häufig auf CDNs von Drittanbietern gehostet wird, stellt man sicher, dass eine JavaScript-Datei nicht verändert oder manipuliert wurde, bevor der Browser sie herunterlädt. Ich möchte lieber einen großen Sicherheitshinweis auf meiner Seite haben, als etwas, das mit JavaScript manipuliert wurde, in meinen Clientbrowser laden.

In einem normalen Programm würde ich die Datei digital signieren, um sicherzustellen, dass sie nicht manipuliert wurde, aber ich glaube nicht, dass Browser eine bestimmte Signatur überprüfen, bevor sie eine JavaScript-Datei herunterladen und/oder laden. Es muss eine Lösung für dieses Problem geben, sonst wäre das Hosten von Dateien auf einem CDN ein großes Sicherheitsrisiko. SSL schützt nur die Datei beim Transport, nicht wenn sie auf dem CDN-Server sitzt.

+1

Wie wenn Ihr CDN gehackt wurde? – Mathletics

+0

@Mathletics Ja. Oder ein Schurkenmitarbeiter beim CDN-Anbieter hat sich entschieden, ein bisschen "Spaß" zu haben. – Cromulent

+0

In beiden Fällen müssen Sie ein neues CDN finden. – Mathletics

Antwort

1

Wenn die Skripts nicht dynamisch sind, können Sie ihre Hashes in der Datenbank speichern und clientseitig vergleichen. Siehe http://pajhome.org.uk/crypt/md5/

+0

Was passiert, wenn das JavaScript, mit dem Sie die MD5-Hashes validieren, manipuliert wurde? Vertraue nichts. – Cromulent

+0

@Cromulent, wenn sie manipulationssicher manipuliert haben, sind Sie überfordert. Serve deine Dateien direkt. Holen Sie sich Ihre eigenen POPs, ziehen Sie Fasern zu ihnen. VERTRAUEN NICHTS. – Mathletics

+2

Die Validierungsbibliothek direkt bereitstellen (wie in eingebettetem JS). – rishta

3

Wenn Sie sicherstellen möchten, dass sie die Clientseite unverändert erreichen und keinem CDN von Drittanbietern vertrauen, müssen Sie den JavaScript-Inhalt direkt von Ihrem Quellserver über HTTPS bereitstellen. Das Vergleichen der Hashes (gemäß @rishta's Antwort) würde bedeuten, dass Sie dafür JavaScript hosten müssen (entweder auf Ihrer Seite oder in separaten .js Dateien, die von Ihrem Server geliefert werden), so dass Sie auch einfach die clientseitige Verschlüsselung bedienen können Code stattdessen von Ihrem Server, was wahrscheinlich insgesamt weniger Overhead bedeuten würde.

Verwandte Themen