/ Forside/ Teknologi / Udvikling / Java / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
File IO Permissions (Microsoft Java VM)
Fra : NeuRo
Vist : 332 gange
150 point
Dato : 08-03-03 21:57

Jeg skriver en applet som skal have adgang til at skrive og læse en fil på brugerens lokale C-drev. Jeg har uden problemer skrevet appletten og fået den til at virke i Suns Java Runtime Environment, men jeg vil konverterer den så den virker i Microsofts Java Virtual Machine ...

Jeg signer min applet med Microsofts signcode, og alt går fint, men når jeg kører min applet så får jeg en exception: "com.ms.security.SecurityExceptionEx". Hvordan skal jeg omgås dette og få det til at virke, så jeg har de rettigheder jeg skal bruge??????

Kode:
--------------
try {
PrintWriter fp=new PrintWriter(new FileOutputStream("c:\\test.bak"),true);


} catch (IOException e){

}
--------------

Håber nogen kan hjælpe.

På forhånd tak!

//NeuRo

 
 
Kommentar
Fra : pmbruun


Dato : 10-03-03 08:55

Jeg har et svar til dig, men der ser ud til at være en fejl i Kandu, så jeg ikke kan komme til at svare...

Peter

Kommentar
Fra : NeuRo


Dato : 10-03-03 10:10

Vil du ikke prøve igen, for lige at se om det er kommet iorden herpå Kandu. Ellers er du også meget velkommen til at maile dit svar til mig på mail@bluecore.dk

Kommentar
Fra : pmbruun


Dato : 13-03-03 09:40

Hej,

Problemet er præcis, hvad din exception siger: Ved at forsøge at tilgå c: forsøger din applet at gå ud af sin sandkasse (sandbox).

Dette er præcis forskellen på java applikationer og applets.

En applet er beregnet til at downloade via en browser, og for at undgå sikkerhedsproblemerne i dette, køres appletten i en sandkasse, hvor den kun har meget begrænset adgang til den udførende computers lokale resourcer. Den har lidt memory, temporær plads og cookies at arbejde med. Laver den vinduer skal de have et bestemt udseende for at undgå trojanske heste, etc.

Derimod har en applet i stor udstrækning adgang til at kommunikere tilbage til den server, som sendte den, og evt. data som din applet har brug for skal lægges der. Applettens afsender er jo selv herre over, hvad den foretager sig, og kan derfor kontrollere, at den ikke laver noget forkert på serveren.

Tænk hvad der ville ske, hvis hvemsomhelst kunne sende en skjult applet til dig, og den så gav sig til at sende dine filer, passwords, etc. hjem.

Microsoft forsøger ganske vidst at lave et system af adgangsniveauer for applets, hvor brugeren kan give en applet lov til at tilgå lokale systemresourcer. Det er et skråplan, og jeg må kraftigt fraråde at lade din applet afhænge af den funktion. Begynder man først at tillade den slags, kommer man let til at åbne sikkerhedshuller: Brugerne vænner sig til at trykke OK til hvadsomhelst, og pludselig en dag har de fået noget rigtigt bras indenbords.

Så hvis din funktionalitet virkelig har brug for at tilgå C:, så *skal* du skrive en java *applikation*, som brugeren skal downloade og installere explicit på sin computer. En applikation har adgang til alle resourcer.

Det er selvfølgelig ikke helt så let at styre upgrades med applikationer som med applets. Brugeren skal selv tage stilling til om der skal downloades nye versioner af din applikation. Det er muligvis en anelse mere besværligt, men det er jo hele pointen med sikkerhed, passwords, etc. at man ofrer lidt besvær for at få sikkerhed.

Udgangspunktet skal være, at brugerens PC er brugerens ejendom, og at brugeren selv må bestemme hvad der bliver installeret hvor og hvornår på den. Der er selvfølgelig undtagelser, som f.eks. en virksomheds PCer på intranet, som alle skal holdes opdateret med samme versioner af fælles software. Hvis det er dette, der er din situation, så findes der værktøjer ude i byen til dette formål.

Med venlig hilsen

Peter M. Bruun


Kommentar
Fra : Claulle


Dato : 28-04-04 11:21

Hej

Man har dog lov til at komme ud af den sandkasse ved at rette i java.policy-filen. Den finder du som udgangspunkt i java.home/lib/security/java.policy. Derudover kan du bemærke at der ligger din .keystore (krypteret) hvor dit certifikat er gemt med den key/kode som du angiver når du signerer filen.

Lav en jarfil med alle klassefilerne og signer den med dit certifikat.

Tilføj det mellem de stipplede linie til java.policy
------------
keystore ".keystore";

grant signedBy "<alias på certifikat>", codeBase "<sti til din signeret jar-fil>" {
permission java.io.FilePermission "<stil til der hvor du vil give tilladelse til at der bliver skrevet på din (eller den som kører appletten's) hdd>", "write";
};
------------

Nu er systemet notificeret om at, en bestemt applet der er signeret med det alias som du har angivet, har ret til at skrive på din hdd

/Claus


Du har følgende muligheder
Dette spørgsmål er blevet annulleret, det er derfor ikke muligt for at tilføje flere kommentarer.
Søg
Reklame
Statistik
Spørgsmål : 177413
Tips : 31962
Nyheder : 719565
Indlæg : 6407803
Brugere : 218875

Månedens bedste
Årets bedste
Sidste års bedste