Hallo Habr! Ich präsentiere Ihnen die Übersetzung des Artikels Julie Marchant Automatisch installiertes JavaScript reparieren oder töten?
Richard Stallmans Aufsatz, The Javascript Trap, stellt fest, dass Benutzer proprietäre Programme ausführen, die jeden Tag automatisch in ihren Browsern installiert werden. Tatsächlich hat er das Problem stark heruntergespielt. Die meisten Benutzer führen nicht nur täglich proprietäre Programme aus, indem sie einfach im Internet surfen, sondern sie führen jeden Tag Dutzende oder sogar Hunderte solcher Programme aus. Die JavaScript-Falle ist äußerst real und produktiv. Es wird angenommen, dass die Arbeit mit Websites ohne diese nicht standardmäßigen, normalerweise proprietären HTML-Erweiterungen verletzt wird, da Webbrowser nicht einmal die offensichtliche Möglichkeit bieten, JavaScript zu deaktivieren. Es wird argumentiert, dass das Deaktivieren von JavaScript nur zu Verwirrung führen wird.
Natürlich müssen wir dieses Problem lösen. Indem er sich darauf konzentriert, ob die Skripte "trivial" oder kostenlos sind, übersieht Herr Stallman einen wichtigen Punkt: Die automatische unbeaufsichtigte Installation der Software selbst ist das Hauptproblem. Die Tatsache, dass Software größtenteils proprietär ist, ist nur ein Nebeneffekt.
Als Antwort auf den Artikel von Herrn Stallman wurde eine Erweiterung für den Firefox-Browser und seine Derivate namens LibreJS entwickelt. Diese Erweiterung analysiert automatisch das gesamte JavaScript auf der Seite, um festzustellen, ob es trivial oder kostenlos ist. Wenn eine dieser Bedingungen erfüllt ist, werden Skripte ausgeführt, andernfalls werden sie blockiert. Ich schätze das LibreJS-Projekt und was es zu tun versucht. Aber ich denke, LibreJS ist grundsätzlich der falsche Ansatz zur Lösung des Problems.
LibreJS schlägt derzeit fehl, da ein Format erforderlich ist, das nirgendwo erkannt wird, aber theoretisch in Zukunft gelöst werden kann. Nehmen wir also an, dass alles in Ordnung ist. Angenommen, LibreJS ist so erfolgreich, dass es den größten Teil des Internets dazu zwingt, Skripte unter freien Lizenzen freizugeben und Lizenzen in einem Format zu beschreiben, das LibreJS versteht.
Auf den ersten Blick scheint es großartig zu sein, aber daraus folgt, dass die Software jeden Tag immer noch leise in unseren Browsern installiert wird. Der einzige Unterschied besteht darin, dass LibreJS die Programme für kostenlos hält.
Ich möchte nicht herunterspielen, wie wichtig es ist, dass alle Programme kostenlos sind. Wenn jedoch auf Wunsch eines Dritten automatisch Software auf unseren Computern installiert wird, ist es unmöglich, die Freiheit auszuüben. Es wird davon ausgegangen, dass alle diese JavaScript-Programme, mit denen jeden Tag problemlos Hunderte neuer Skripte erstellt werden können, auf Ihrem Computer ausgeführt werden sollen, normalerweise bevor Sie ihren Quellcode überhaupt überprüfen können.
Schlimmer noch, das unbeaufsichtigte JavaScript-Installationssystem installiert Software nur vorübergehend, um sie nur einmal auszuführen. Wenn der Server JavaScript aktualisiert, das an Webbrowser gesendet wird, wird dieses Update an Benutzer weitergegeben. Selbst wenn das Skript kostenlos ist, scheint es eine eingebaute Hintertür zu haben.
Dies ist dem Fall der Tivoisierung sehr ähnlich, wenn Sie theoretisch die Freiheit haben, die Funktionsweise des Programms zu steuern, dies jedoch in der Praxis aufgrund der Umstände nicht möglich ist. Eine theoretische Kontrolle reicht nicht aus. Eine tatsächliche Kontrolle ist ebenfalls erforderlich. Im Fall von JavaScript ist dieser Mangel an Kontrolle nicht das Ergebnis böswilliger Absichten, sondern das Ergebnis der unachtsamen Annahme von Webbrowsern, dass der Benutzer jedes Skript ausführen möchte, das eine Webseite anbieten kann. Dies ist nicht unbedingt der Fall. Es wäre, als würde Windows jedes Mal auf meinem Computer installiert, wenn ich einen Artikel lese, in dem die Verwendung von Windows empfohlen wird, oder wenn im Blog darüber gesprochen wird, wie großartig Chrome ist, würde Chrome automatisch auf meinem System installiert.
Was können wir also tun? Ich kenne zwei mögliche Lösungen.
Lösung 1: JavaScript korrigieren
Die erste mögliche und naheliegendste Lösung besteht darin, das Verhalten von Webbrowsern in Bezug auf JavaScript-Softwareanforderungen zu ändern. Ich schlage vor, dass alle folgenden Bedingungen erfüllt sein MÜSSEN, damit das System akzeptabel ist:
- Der Browser sollte JavaScript-Code ständig und nur dann installieren, wenn der Benutzer dies ausdrücklich zulässt.
- Der Browser sollte dem Benutzer die Möglichkeit bieten, ein beliebiges Skript zu installieren, und nicht nur das von der Webseite angeforderte Skript.
- Der Browser sollte den JavaScript-Code nicht automatisch aktualisieren, es sei denn, der Benutzer hat angegeben, dass er aktualisiert werden soll, und der Benutzer sollte auswählen können, woher solche Aktualisierungen stammen.
Sie werden feststellen, dass die automatische Lizenzerkennung in keinem dieser Punkte enthalten ist. Wie erhält der Benutzer nur kostenloses JavaScript, ohne jede Quelldatei manuell zu überprüfen? Die Lösung ist eigentlich ganz einfach: genau wie jede andere freie Software. Ich vertraue darauf, dass Trisquel-Entwickler nur kostenlose Programme ohne schädliche Funktionen in das Repository aufnehmen. Übrigens können Trisquel-Entwickler Benutzer vor proprietärer oder nicht proprietärer Malware schützen. LibreJS - kann nicht. Ebenso können wir ein Repository mit kostenlosem JavaScript-Code erstellen und verwalten.
Damit dies funktioniert, sollten installierte JavaScript-Programme auch auf allen Webseiten funktionieren, die dies anfordern, und nicht nur auf einer Seite. Was den bereits installierten JavaScript-Code betrifft, kann die Möglichkeit seiner Verwendung bestimmt werden, indem ein Hash von minimierten Versionen der installierten Skripte abgerufen und dann nach ihrer Minimierung auf dieselbe Weise ein Hash der angeforderten Skripte empfangen wird. Wenn die Hashes nicht übereinstimmen, können Sie die Namen der Skriptdateien auf vollständige oder teilweise Übereinstimmung überprüfen. Der Benutzer wird möglicherweise gefragt, ob diese Skripte verwendet werden sollen. Es ist auch nützlich für eine Art Datenbank im Browser des Benutzers, um Websites zu identifizieren, auf denen bestimmte Skripte verwendet werden können.
Ich glaube, dass dieser Ansatz erhebliche Anstrengungen erfordern wird, und das ist wahrscheinlich der Grund, warum der LibreJS-Entwickler nicht versucht hat, dies zu tun. Es hilft nicht, dass das Erreichen der Zuverlässigkeit kontinuierliche Arbeit erfordert, um mit dem Seitenwechsel Schritt zu halten.
Lösung 2. Beenden Sie JavaScript
Als ich so etwas wie Lösung 1 auf der Bug-Gnuzilla-Mailingliste vorschlug, stellte eine der Antworten fest, dass es eine viel einfachere Lösung gab: Anstatt zu versuchen, JavaScript zu reparieren, konnten wir die JavaScript-Ausführung in unseren Browsern vollständig deaktivieren (mit anderen Worten Javascript töten). Natürlich meine ich automatisch installiertes JavaScript. Zum Beispiel ist es nichts Falsches, JavaScript zum Entwickeln von Firefox-Erweiterungen zu verwenden. Benutzerdefinierte Skripte und Erweiterungen können sogar so gestaltet werden, dass sie wichtigen proprietären JavaScript-Code ersetzen.
Diese Lösung ist jedoch nicht ohne Probleme. Dies erfordert insbesondere enorme soziale Veränderungen, wenn auch weniger, als LibreJS versucht. Browser, die die JavaScript-Unterstützung entfernen, können in dieser Hinsicht hilfreich sein. Es gibt jedoch ein Problem mit dem Huhn und dem Ei in dem Sinne, dass Browser ohne JavaScript-Unterstützung als minderwertig angesehen werden, während für viele Websites Skripts erforderlich sind.
Einer der Zwischenschritte, um dies zu erreichen, kann ein Browser sein, der JavaScript unterstützt. Standardmäßig sollte JS jedoch deaktiviert sein und dem Benutzer eine einfache Möglichkeit bieten, JavaScript vorübergehend auf einer Seite zu aktivieren. Auf diese Weise kann der Benutzer Erfahrungen sammeln, ohne JavaScript zu verwenden, kann jedoch JavaScript für die Seiten verwenden, auf denen er benötigt wird, ohne dass Unannehmlichkeiten auftreten, die den Browser unangenehm machen. Es würde sogar einen angenehmen Nebeneffekt für die Benutzer geben - ihre Arbeit im Internet würde reibungsloser werden. Viele Websites haben riesige aufgeblähte Skripte, die Sie vollständig vermeiden können, indem Sie einfach JavaScript deaktivieren.
Fazit
Jeder dieser Ansätze hat Stärken und Schwächen.
Die erste Lösung kann sofort gute Ergebnisse für Websites wie Diaspora und Reddit liefern, für die JavaScript-Code erforderlich ist, die jedoch größtenteils kostenlos sind. Dies wird wahrscheinlich nicht zu wesentlichen Änderungen im Internet führen, ist jedoch für die Arbeit nicht erforderlich. Dies erfordert jedoch einige Arbeit, um das Verhalten des Browsers in Bezug auf JavaScript richtig zu konfigurieren, und es würde viel mehr Arbeit erfordern, um ein Repository mit kostenlosen JavaScript-Programmen zu verwalten.
Die zweite Lösung ist ziemlich ähnlich zu dem, was LibreJS derzeit versucht, wenn auch in viel kleinerem Maßstab. Es hängt von der Veränderung im Internet ab: Die meisten Webentwickler davon zu überzeugen, keinen JavaScript-Code mehr zu verwenden. Wenn diese Lösung funktioniert, kann der Effekt beeindruckend sein. Andererseits kann diese Lösung leicht fehlschlagen oder einfach zu einer anderen Methode führen, mit der Software automatisch in den Browsern der Benutzer installiert wird.
Ich bin mir nicht sicher, was besser ist, aber LibreJS ist weder eine gute noch eine gute Lösung, noch ein Schritt in die richtige Richtung. Solange ein kostenloser Browser verfügbar ist, der JavaScript korrekt korrigiert, sollte jeder, der Freiheit beim Rechnen wünscht, alle üblichen JavaScript-Aktionen in seinem Browser deaktivieren, auch wenn der Code kostenlos ist, und Webentwickler, die die Freiheit ihrer Benutzer respektieren, sollten das gesamte erforderliche JavaScript entfernen auf ihren Websites.