Security Manager für bestimmte Klassen/Classloader?

mohrenkopf

Mitglied
Hallo,

ich suche eine Möglichkeit, einer Klassen (bzw. deren Instanz), die zur Laufzeit von Platte nachgeladen werden, die Zugriff auf das Dateisystem zu entziehen, das "hauptprogramm" benötigt jedoch weiter Schreibzugriff.

Ungefähr sowas möchte ich haben:

Java:
        SomeClass good = new SecureClass();
        SomeClass evil = MyClassLoader.createInstanceFromFile("c:/evil.class");

        
        good.writeToDisk(); //soll gehen
        evil.writeToDisk();  //das soll verboten werden!



Kann man einen Securitymanager gezielt auf eine Klasse bzw einen Klassenlader ansetzen?

Selbst einen Securitymanager zu schreiben, der dann per Reflection/Stacktrace etc. die aufrufende Methode ermittelt und gezielt schreibrechte durchlässt, erscheint mir nicht sehr sauber...
 
Ich kenne mich damit nicht so gut aus, aber:
  • Hast Du mal probiert in Deinem ClassLoader bei Aufruf von
    Code:
    ClassLoader.defineClass(java.lang.String, byte[], int, int, java.security.ProtectionDomain)
    eine geeignete ProtectionDomain mitzugeben? Die URL für die CodeSource bekommst Du ja frei Haus.
  • Mal mit den Einstellungen des java.policy Files experimentiert?
 
Zuletzt bearbeitet:
Nein, habe ich noch nicht, hatte mit dem Security-Kram noch nichts zu tun.

Habe auch im Netz wenig hilfreiches zum Lesen gefunden, vielleicht weiß jemand einen nützlichen Link oder hat ein bisschen Beispielcode?
 
Ich habe das auf die Schnelle mal so gelöst, dass ich einen eigenen Securitymanager geschrieben habe, den ich "von Hand" in einen restriktiven Modus umstellen kann. Das läuft dann ungefähr so:

Java:
...
SecurityManager sm = new MySecurityManager();
System.setSecurityManager(sm);
...
SomeClass good = new SecureClass();
SomeClass evil = MyClassLoader.createInstanceFromFile("c:/evil.class");


good.doSomething();

sm.enableWriteAccess(false);  //kein Schreibzugriff mehr möglich
evil.doSomething();
sm.enableWriteAccess(true);   //Schreibzugriff wieder erlauben

Funktioniert zwar, ist aber ziemlich umständlich und auf Handarbeit angewiesen. Spätestens wenn der fremde Code in einem eigenen Thread laufen soll (also parallel zu Code, der Zugriff haben soll), ist mit dieser Lösung auch Essig...


Habe im Netz noch irgendwo eine Lösung gefunden, bei der der Securitymanager den Stacktrace von Hand analysiert, aber das muss doch auch eleganter gehen?
 

Neue Themen


Zurück
Oben