Kategorien
Blog

Entfernt endlich Java aus dem Browser!

Java ist eine mächtige Sprache mit vielen Vorteilen:

Eine ausgereifte Virtuelle Maschine mit robuster Unterstützung von Nebenläufigkeit, die in der Geschwindigkeit ohne den Einsatz maschinenspezifischen Codes schwer zu schlagen ist, und deren Verbreitung auf unzähligen Systemen das einst gegebene Versprechen „Write once, run anywhere.“ so gut wie möglich einlöst. Dazu gibt es einen bunten Strauß an APIs für alle möglichen Einsatzgebiete.

Alles könnte so schön sein. Seit einiger Zeit aber hört man alle paar Wochen bis Monate (gefühlt ist es alle drei Tage) Meldungen über Sicherheitslücken und Exploits. Die Lücken befinden sich praktisch immer in der Absicherung des Browserplugins, der sogenannten Sandbox, dabei wird das Plugin gar nicht mehr gebraucht.

Vor 10 Jahren ergab es durchaus Sinn, Java-Applets in Webseiten zu integrieren: während JavaScript (nicht zu verwechseln, merke: „Java verhält sich zu JavaScript wie Wal zu Walnuss.“) noch in einem echten Interpreter ausgeführt wurde und entsprechend langsam war, hatte Java bereits einen JIT-Compiler. Auf der damaligen Hardware war das ein echter Vorteil, zumal die verlängerten Startzeiten im Vergleich zur Downloaddauer über die damaligen Internetverbindungen kaum ins Gewicht fielen. Heute wird auch JavaScript vor der Ausführung kompiliert, und so bleiben nur die Nachteile:

Das Sandboxkonzept ist bei der gegebenen Sprachmächtigkeit nicht in den Griff zu bekommen. Die JVM hat volle Unterstützung für Datei- und Netzwerkoperationen sowie Möglichkeiten zur dynamischen Erzeugung von Klassen, die diese Funktionen benutzen.

Die JavaScript-API in Browsern hat dagegen keinen schreibenden Zugriff auf das Dateisystem und kann im Netzwerk nur http-Verbindungen aufbauen. Nur mit einer Sprache, deren Laufzeitumgebung keine Konzepte der verbotenen Operationen hat, lässt sich eine halbwegs sichere Sandbox implementieren.

Das bedeutet nicht, dass es völlig unmöglich ist, auch aus der JavaScript-Sandbox auszubrechen, aber in Java muss der Angreifer nur die virtuelle Maschine austricksen, während er bei einer JavaScript-Lücke den systemspezifischen Maschinencode selbst einschleusen müsste. Während also JavaScript zum Ausbruch aus seinem Sandkasten ein Schäufelchen zur Verfügung hat, handelt es sich bei Java eher um einen Radlader. „Write once, run anywhere“ gilt bei Java eben auch für Exploitcode.

Die Konsequenz muss sein, Java komplett aus dem Browser zu entfernen — und das sage ich als Java-Entwickler. Beliebte und benötigte Java-Anwendungen wie Wordle oder ELSTER können genau so gut lokal als Programme installiert werden. Die JVM an sich ist nämlich nicht unsicherer oder sicherer als andere Laufzeitumgebungen, und es schmerzt, dass nach Jahren des „Java? Das ist doch viel zu langsam.“ sich jetzt „Java? Das ist doch viel zu unsicher.“ im allgemeinen Bewusstsein festsetzt.

Die Überlegungen gelten genau so übrigens auch für Flash.

Kategorien
Microblog

Ach, #Oracle … m( http://t.c…

Ach, #Oracle … m( blog.fefe.de/?ts=af904abc #Java #seufz  #

Kategorien
Microblog

RT @kaffeeringe: Petition: Sto…

RT @kaffeeringe: Petition: Stop bundling crapware with #Java is.gd/z8e5qy #oracle  #

Kategorien
Linkdump

higher-order functions in Java

higher-order functions in Java

List<Integer> input = Arrays.asList(new Integer[]{1, 2, 3, 4, 5});

Integer output = Functionals.foldr(new Function<Integer, Integer>() {

@Override
public Integer call(final Integer t1, final Integer t2) {
return t1 + t2;
}
}, 0, input);

System.out.println(String.format("Sum: %s", output));

(adrianwalker.org)
aus Delicious/steinhobelgruen

Kategorien
Blog

Ich brauche Mitarbeiter

Hallo Entwickler! Ich brauche hier dringend neue Kollegen!

Wer ein gestandener Java- oder .NET-Entwickler ist, und im Raum Stuttgart wohnt (oder sich vorstellen könnte, dort zu Arbeiten) und einen Job in Festanstellung sucht, der kann sich bei mir melden.

Kategorien
Microblog

Warum ist dieses Panel beim Pr…

Warum ist dieses Panel beim Programmstart kurz weg? Warum passiert das nicht im Debugger? Warum fliegt keine Exception? #Swing #Grrrr #

Kategorien
Microblog

http://twitpic.com/2oadk – Mac…

http://twitpic.com/2oadk – Mac-Java-Experten anwesend? Weiß jemand, warum es mir (nur) auf dem Mac mein Swing-Layout so zerhaut? #

Kategorien
Linkdump

JMeter – User’s Manual

JMeter – User’s Manual
Apache JMeter is a 100% pure Java desktop application designed to load test client/server software (such as a web application ). It may be used to test performance both on static and dynamic resources such as static files, Java Servlets, CGI scripts, Java objects, databases , FTP servers , and more. JMeter can be used to simulate a heavy load on a server, network or object to test its strength or to analyze overall performance under different load types.
aus Delicious/steinhobelgruen

Kategorien
Linkdump

EclEmma – Java Code Coverage for Eclipse

EclEmma – Java Code Coverage for Eclipse
EclEmma is a free Java code coverage tool for Eclipse, available under the Eclipse Public License. Internally it is based on the great EMMA Java code coverage tool, trying to adopt EMMA's philosophy for the Eclipse workbench.
aus Delicious/steinhobelgruen

Kategorien
Blog

Anfall von Technikfeindlichkeit

Nix gefunden

„Es wurden keine Suchergebnisse gefunden. Haben Sie gefunden, wonach Sie gesucht haben?“

#*()=§!“/&!%/!!!! Nein! Natürlich nicht!

A rose by any other name...

„Type mismatch: Cannot convert from ArrayOfCameraJC to ArrayOfCameraJC“

Ääääh, wie jetzt? — Eigentlich mag ich Computer manchmal garnicht.

Kategorien
Linkdump

OpenSCEP

OpenSCEP
OpenSCEP is an open source implementation of the SCEP protocol used by Cisco routers for certificate enrollment to build VPNs. It implements most of the draft specification, include as reference in the distribution.
aus Delicious/steinhobelgruen

Kategorien
Blog

Subversion mit svn+ssh-Protokoll und Eclipse

Diese Anleitung muß ich für ein paar Kollegen im Moment sowieso schreiben, und vielleicht interessiert das ja noch irgendjemanden. Bevor ich also wieder so ein unkommunikatives Word-Dokument rumschicke:

1. Subclipse

Im Gegensatz zu CVS wird der Nachfolger Subversion von Eclipse (noch?) nicht direkt unterstützt — dabei hat Subversion viele Vorteile (z.B. atomare Transaktionen und Versionierung über Verschiebungen und Umbenennungen hinweg). Zuerst müssen wir das deshalb in Form eines Plugins nachrüsten: Subclipse gibt es bei tigris.org, und eine Installationsanleitung ist auch dort.

So, jetzt kann man in Eclipse die „SVN Repository Exploring perspective“ öffnen und dort die Adresse seines Repositories eintragen.

Add SVN Repository

Auf UNIXoiden Betriebssystemen wie Linux, Solaris und MacOS X kann man den folgenden Schritt überspringen. Dort ist ssh in der Regel installiert, im Pfad und kann als Tunnel gestartet werden ohne Fensterchen aufzumachen.

2. ssh-Tunnel aufbauen

Subversion unterstützt einen Haufen unterschiedlicher Protokolle. Neben dem direkten Dateizugriff auf das Repository und einem eigenen Protokoll für lokale Aufrufe unterstützt es WebDAV über http(s) durch ein Apache-Modul und kann über verschiedene Remote-Shell-Protokoll tunneln. Wenn man die Repositories (so wie wir) auf einem UNIX-Server lagert und keine Lust hat, sich mit dem svnDAV-Apache-Modul und seiner zweiten Benutzerverwaltung herumzuschlagen, dann ist das svn+ssh-Protokoll eine günstige Wahl. Leider kommt Windows ohne ssh-Client (im Repository Explorer sieht man unklare Fehlermeldungen wie „Das Verzeichnis ist nicht da.“), deshalb muß Abhilfe geschaffen werden.

Kategorien
Blog

Das Orakel (oder: auf dem Weg zu den Originaldaten)

Einer der Haupthinderungsgründe für den Weiterbetrieb der Alertbird-Software war ja immer der Ressourcenbedarf (sowohl Rechner- als auch Geld-) der Oracle-Datenbank. Meine Umbautätigkeiten bestehen deshalb bisher zum größten Teil aus Änderungen, um die Daten in Zukunft in einer PostgreSQL-Datenbank halten zu können. Leider habe ich die alten Daten nur in Form eines exp/imp-Dumpfiles für Oracle 8i, drum mußte ich tricksen:

Aus der Arbyte habe ich mir eine virtuelle VMWare-Maschine mit Oracle 9i drauf ausgeliehen, dort den Dump eingespielt und mit einem JAVA-Programm die Daten in die Postgres rüberkopiert (solche Programme sind schnell geschrieben, das habe ich schließlich im FleetBoard-Projekt lange genug geübt). Leider waren nachher alle Umlaute weg (bzw. es war ein Bit abgeschnitten — die Leute heißen dann z.B. „Jvrg“). Kurz nachgesehen: die Umlaute waren aber auch in der Quelldatenbank schon weg, am Kopierprogramm liegt’s also nicht. imp nochmal ausgeführt: da steht doch tatsächlich, die Daten seien US7ASCII-Kodiert. Ohje, sollten die Umlaute etwa beim Export schon verschwunden sein? Dann wären sie seit 2004 weg und wohl nicht wieder aufzutreiben…

Zum Glück waren die Umlaute in der Datei selbst vorhanden, da stimmte wohl nur die Deklaration nicht (das bedeutet übrigens gleichzeitig, daß Umlaute in Alertbird in der Vergangenheit nur deshalb funktioniert haben, weil Oracle sich vor Version 9 nicht um den Inhalt des achten Bits geschert hat, wenn ein 7-Bit-Zeichensatz eingestellt war). Hier fand ich eine Erklärung, wie die Zeichensatzangabe in die Exportdatei kommt. Ich brauchte also nur einen Hexeditor…

Cygnus Hexedit

… und mußte den Anfang der Datei von „03 00 01 …“ auf „03 00 1F…“ ändern, nochmal in Oracle importieren und die Kopie noch einmal starten.

Das sieht doch schon ganz gut aus (an den Datumsfeldern muß ich aber noch feilen, die verlieren noch alle ihre Uhrzeit):

Echt alte Daten