Source Map

Source Map

Eine Source Map ist eine Zusatzdatei, die maschinell zusammengestauchten Programmcode wieder auf den ursprünglich geschriebenen Code zurückführt. Entwickler können damit Fehler an der Stelle suchen, an der sie den Code tatsächlich getippt haben.

Programme für Webseiten werden von Menschen geschrieben, aber nicht in dieser Form ausgeliefert. Vor der Veröffentlichung läuft der Text durch ein Werkzeug, das ihn automatisch verkleinert. Leerzeichen und Kommentare fliegen raus, lange Namen wie « berechneGesamtpreis » werden zu einem einzigen Buchstaben. Das Ergebnis funktioniert genauso, ist aber für Menschen praktisch unlesbar. Eine Source Map ist eine zweite Datei, die beide Fassungen miteinander verknüpft. Sie hält fest, welche Stelle im gestauchten Text welcher Zeile im Original entspricht.

Warum Fehlermeldungen sonst wertlos wären

Wenn ein Programm im Browser abstürzt, meldet der Browser die Stelle des Absturzes. Ohne Source Map lautet diese Meldung etwa: Fehler in Zeile 1, Zeichen 84312. Das hilft niemandem, denn die ausgelieferte Datei besteht oft nur aus einer einzigen, sehr langen Zeile. Mit Source Map wird daraus: Fehler in der Datei Warenkorb, Zeile 47. Damit kann ein Entwickler sofort arbeiten.

Der Grund für das Stauchen ist Geschwindigkeit. Jedes Byte, das eine Webseite überträgt, kostet Ladezeit, besonders im Mobilfunknetz. Große Anwendungen sparen durch die Verkleinerung schnell die Hälfte ihres Umfangs. Man will also beides: kleine Dateien für die Nutzer und lesbare Fehler für das Entwicklungsteam. Die Source Map löst genau diesen Zielkonflikt.

Auch Werkzeuge, die Abstürze bei echten Nutzern sammeln, hängen daran. Sie bekommen unbrauchbare Meldungen und übersetzen sie im Hintergrund mit der Source Map zurück. Erst dadurch entsteht eine Fehlerliste, aus der ein Team ablesen kann, welches Problem am häufigsten auftritt.

Die Übersetzungstabelle dahinter

Eine Source Map ist im Kern eine lange Tabelle von Positionen. Für viele Punkte im ausgelieferten Code steht darin, aus welcher Originaldatei und welcher Zeile dieser Punkt stammt. Zusätzlich speichert sie oft die ursprünglichen Namen der Variablen. Diese Tabelle wird stark komprimiert abgelegt, sonst wäre sie riesig.

Man kann sich das wie das Stichwortverzeichnis eines Buches vorstellen. Das Verzeichnis selbst erzählt keine Geschichte, es verweist nur auf Seitenzahlen. Genauso enthält eine Source Map keinen funktionierenden Code, sondern ausschließlich Verweise. Am Ende der ausgelieferten Datei steht ein kurzer Kommentar, der auf die passende Map zeigt.

Wichtig ist der Zeitpunkt der Übersetzung: Sie passiert erst, wenn jemand hinschaut. Der Browser lädt die Source Map normalerweise nur, wenn die Entwicklerwerkzeuge geöffnet sind. Normale Besucher bekommen die Datei also gar nicht zu Gesicht. Genau deshalb bremst sie die Webseite nicht aus.

Vom Browser-Werkzeug bis zum Sicherheitsvorfall

Jeder kann Source Maps ausprobieren. Öffnet man auf einer Webseite mit der Taste F12 die Entwicklerwerkzeuge, zeigt der Reiter für Quellcode oft ordentlich formatierte Dateien mit sprechenden Namen. Das ist die Wirkung einer Source Map. Fehlt sie, sieht man dort nur eine Buchstabenwüste.

In Nachrichten tauchen Source Maps meist als Panne auf. Manche Unternehmen laden sie versehentlich mit auf den öffentlichen Server. Dann lässt sich der interne Quellcode einer App fast vollständig rekonstruieren, inklusive Kommentaren und Namen von internen Systemen. Solche Funde stehen regelmäßig hinter Berichten über offengelegten Code großer Anbieter.

Ein verbreiteter Irrtum ist, dass eine Source Map den Code schützt oder verschlüsselt. Das Gegenteil stimmt: Sie macht ihn wieder lesbar. Fachleute unterscheiden deshalb zwischen dem Verkleinern des Codes und echter Verschleierung, die Angreifer bewusst ausbremsen soll. Für die Praxis gilt eine einfache Regel: Source Maps gehören auf den Rechner des Teams oder auf einen geschützten Server, nicht ins offene Netz.

Subscribe free. Unsubscribe the second it sucks.

High-signal news across AI, business, UX, and tech. Every morning.