LocalCDN: Verbessertes Decentraleyes-Add-on für Firefox

Das Add-on Decentraleyes habe ich im Firefox-Kompendium vorgestellt. Kurz: Decentraleyes kappt die Verbindung zu trackenden CDNs und lädt JavaScript-Ressourcen lokal nach. Nachfolgend wird euch nobody sein Firefox-Add-on LocalCDN vorstellen, das ein Fork bzw. eine Weiterentwicklung von Decentraleyes ist.

Gastbeitrag

Ein Gastbeitrag von nobody.

Wie bei fast allen Browser-Erweiterungen, ist es von Vorteil, wenn man versteht, was eine Erweiterung leistet. LocalCDN ist ein Fork von Decentraleyes und keine Erweiterung, die man nach dem Prinzip »add-and-forget« installiert und sich nicht weiter damit befassen muss.

Unterschiede zu Decentraleyes

Aktuell unterstützt die Erweiterung 39 CDNs und kann 179 Bibliotheken bereitstellen. LocalCDN enthält weitere Funktionen, die sich von Decentraleyes unterscheiden:

  • Upgrades: LocalCDN enthält eine Vielzahl an JavaScript und CSS, aber auch teilweise Fonts bzw. Icons. Damit möglichst viel auf möglichst wenig Speicherplatz untergebracht werden kann, wird stets die aktuellste Version einer Bibliothek ausgeliefert. Das Ergebnis zahlt sich aus: Die Erweiterung ist zwar 14 MB groß, enthält aber 179 Bibliotheken. Beispiel: Eine Webseite möchte Bootstrap in der Version 5.0 einbinden, von LocalCDN wird allerdings »Bootstrap 5.0.1« ausgeliefert. In den meisten Fällen funktioniert dieses Upgrade problemlos. Hinweis: In seltenen Fällen kann es vorkommen, dass neuere Bibliotheken nicht abwärtskompatibel sind. Wird ein Upgrade durchgeführt, ist das im Menü an dem Zeichen » erkennbar. Beispiel: 3.5.0 » 3.5.1.
  • Regel-Generator: Wer uBlock Origin (Medium oder Hard), uMatrix oder AdGuard verwendet, kann sich in den Einstellungen von LocalCDN die jeweiligen Regelsätze generieren lassen. Die Regeln können anschließend einfach kopiert werden und in der jeweiligen Erweiterung hinzugefügt werden. Doppelte Einträge werden zumindest von uBlock Origin automatisch entfernt. Nützlich: Wurden neue CDNs hinzugefügt, öffnet sich optional ein neuer Tab mit den Änderungen der aktuellen Version und dem Regel-Generator.
  • HTML-Filter: Im Menü der Erweiterung befindet sich der Schalter »HTML-Filter«. Ist dieser aktiviert, wird der Quelltext der aktuellen Webseite analysiert und »Crossorigin- und Integritätsattribute« für eingebundene JavaScript- und CSS-Dateien entfernt. Diese Attribute würden sonst einen Austausch verbieten, da die Checksumme (durch das o.g. Upgrade) und die Quelle (nicht cdn.cloudflare.com sondern moz-extension://) nicht übereinstimmen. Der Browser würde aus Sicherheitsgründen das Einbinden nicht erlauben. Diesen HTML-Filter kann man wahlweise nur auf einzelne Webseiten anwenden (über den Schalter im Menü) oder dauerhaft. Letzteres lässt sich in den Optionen aktivieren.

Beispiel: Der HTML-Filter entfernt aus dem angeforderten Quelltext einer Webseite die folgenden mit grün markierte Zeichen:

<script src=“https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js“ integrity="sha512-894YE6QWD5I5[...]/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous"></script>

Der Browser lädt anschließend den modifizierten Quelltext:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

Diese Attribute sagen dem Browser, welche Prüfsumme die Bibliothek haben muss und woher sie stammen muss. Beides würde einen Austausch der Bibliothek verhindern. Der HTML-Filter verändert also den Quellcode einer Webseite, kann aber keine CSP (Content-Security-Policy) umgehen, die vom Webserver als HTTP-Header an den Webbrowser gesendet wird. Wenn der Webserver mit einer CSP die Quellen einer Bibliothek definiert (z.B. cdn.cloudflare.com) kann eine Bibliothek nicht von LocalCDN ersetzt werden, weil das »neue« Ziel nun moz-extension:// lautet. Der Browser verbietet den »Austausch«. (Ab Firefox 89.0 ist allerdings die Adresse moz-extension:// von der CSP ausgenommen und stellt somit eine legitime Umleitung dar.)

Hinweis

Beim Entfernen dieser Attribute kann es zu fehlerhaften Schriftzeichen kommen. Dieser Fehler entsteht, wenn die Webseite nicht in UTF-8 ausgeliefert wurde, da das Zurückschreiben der Webseite nur in UTF-8 möglich ist und konvertiert werden muss. Da jedoch ca. 96,9% aller Webseiten den UTF-8 Zeichensatz verwenden, sollte dieser Fall eher die Ausnahme darstellen.

Weitere Besonderheiten

Weitere besondere Funktionen und integrierte Bibliotheken:

  • Bootstrap
  • Font Awesome
  • Google Material Icons
  • React, Vue.js, Chart.js, MathJax, u.v.m.
  • Interne Statistik (optional)
  • Einstellungen exportieren/importieren
  • Firefox Sync um Einstellungen geräteübergreifend zu synchronisieren (optional)

Einige Funktionen werden technisch bedingt nur von Firefox unterstützt und in anderen Browsern automatisch ausgeblendet, da die erforderlichen APIs dort schlicht fehlen. Darunter fallen der HTML-Filter als ganzes, aber auch die Einbindung aller Icons (Font Awesome, Bootstrap und Google Material Icons). Die inoffizielle Chrome-Erweiterung von LocalCDN wird von »Emanuel Bennici« veröffentlicht und hinkt den Versionsnummern etwas hinterher.

Die in der Erweiterung enthaltenen Bibliotheken können über ein Bash-Skript mit dem Original validiert werden – optional sogar über das Tor-Netzwerk (torsocks). Dazu wird die Erweiterung von addons.mozilla.org herunterladen (Rechtsklick auf »Hinzufügen«) und die XPI-Datei entpackt. Das Bash-Skript befindet sich dort im Ordner /audit/audit.sh.

Du kannst den Blog aktiv unterstützen! Mitmachen ➡