| 

.NET C# Java Javascript Exception

2
Hallo,

ich würde gern ein Programm schreiben das Erweiterungen unterstützt. Die Erweiterungen sollen als Java Klasse geladen werden und von jeder Person eingereicht werden können. Ich will jedoch erreichen das die Methoden dieser Klasse nicht die vollen Rechte haben um keinen Schaden am System oder Programm anrichten zu können.

Die Erweiterung soll lediglich in der Lage sein ein Teil der GUI zu stellen und auf die interne HSQLDB können.

Kann man mit dem Security Manager iwas basteln so das die geladenen Klassen lediglich auf einer von mir zu Verfügung gestellte API zugreifen können und auf keinen Fall Dateien löschen oder ähnliches können

Oder, kann man dieses Problem anders besser lösen?

Peter
News:
27.08.2010
pita 21 1
wieso darf ich den diesen beitrag editieren??? dürfen das alle?
fenchurch 28.08.2010
1
Ja das dürfen alle. Das wurde vom Team mal so entschieden. Dazu gibts aber die History wenn du auf "Editiert DD.MM.YY" klickst.
gfoidl 28.08.2010
4 Antworten
1
Leider muss ich dir mitteilen das dies in Java nicht möglich ist. Zwar würde J# diese Möglichkeiten bieten, jedoch setzt dieses dann nicht mehr auf Java sondern auf .Net auf.


http://stackoverflow.com/questions/1056567/java-appdomain-like-abstraction
28.08.2010
Floyd 10,4k 3 9
1
Falls das Thema noch aktiv ist, du könntest dir mal Eclipse RCP oder allgemein OSGI anschauen. Damit kannst du sogar Komponenten zur Laufzeit laden und austauschen. Das Framework benötigt allerdings etwas Einarbeitungszeit und bis es stabil funktioniert noch etwas mehr. Wahrscheinlich ist es daher zu groß für dein Problem.

Eine andere, etwas einfachere Möglichkeit wäre es, dir ein Interface zu schreiben, das den Zugriff auf dein Hauptsystem, die GUI und die Datenbank erlaubt. Dann müsstest du über Reflections einen Konstruktor der Fremdklasse holen, der nur genau dieses Interface als Parameter bekommt (gibst du deinen Fremdprogrammierern als Constraint mit) und instantiierst diese Klasse mit einer konkreten Implementation deines Interfaces. Schlüsselpunkt wäre es, dein Interface entsprechend deiner Wünsche sicher zu machen.
Da du Fremdcode ausführst, wird sich leider nicht verhindern lassen, dass von dort auch beliebiger Code ausgeführt wird oder jemand die Virtual Machine beendet. Dein Programm selber bekommst du mit obigen Tipps allerdings einigermaßen geschützt.
18.09.2010
1
"Da du Fremdcode ausführst, wird sich leider nicht verhindern lassen, dass von dort auch beliebiger Code ausgeführt wird" und genau das ist sein Problem. In .Net zum Beispiel kann ich Plugins laden, ihnen die Rechte für Dateisystemoperationen entziehen und selbst wenn das Teil abstürzt ziehts den Host nicht mit runter.
Floyd 29.09.2010
0
Doppelpost
28.08.2010
Floyd 10,4k 3 9
Floyd 10,4k 3 9
0
Wie wäre es mit einer Scriptsprache? So wie ich das verstehe kann man da genau definieren auf welche Objekte man aus den Scripten Zugriff hat. Siehe für Beispiele http://www.heise.de/developer/artikel/Java-6-Scripting-mit-JRuby-920124.html für jRuby gibts aber für auch für JS und andere.
07.02.2011

Stelle deine Java-Frage jetzt!