_ 4.1.1 Säkra program med funktionella restriktioner Äpplen körs, till skillnad mot fristående applikationer, i en webbläsare vilket av säkerhetsskäl medför att äpplen default är begränsade i vad de får göra, de körs i en så kallad sandlåda. Vi ska nu se hur man som användare själv kan bestämma vilka säkerhetsrestriktioner som ett äpple ska ha. Notera att fristående program har, tvärtemot äpplen, inga restriktioner alls default men att man kan använda exakt samma teknik på fristående program om man vill ge dem speciella restriktioner. Uppgiften går ut på att skapa en speciell policy som låter ett äpplet göra vissa saker som det default inte tillåts göra i sandlådan. __ Uppgift En av de begränsningar som äpplen default har är att de endast får koppla sig till vissa ställen beroende på hur det har startats: - Lokalt på samma dator: -- Protokoll: §File§ -- Säkerhet: Filen som ska accessas måste komma från samma katalog som äpplet -- Exempel: §file:///C:/Users/Pierre/en_fil.html§ - Via en webbserver från en annan dator: -- Protokoll: §HTTP§ -- Säkerhet: Filen som ska accessas måste komma från samma domän som äpplet -- Exempel: §http://atlas.dsv.su.se/en_fil.html§ Försöker man ladda en fil utanför det område beskrivet ovan så genereras en §Security Exception§. Skapa en policyfil som ger ett program som startas med denna policy följande tillåtelse: - Program som kommer från en viss plats, det vill säga en viss §CodeBase§, får koppla upp sig till valfri adress på Internet Gör om programmet från uppgiften [3.1.1 Webbserverkopplingar, 05_ass/ip1/3.1.1.txt] till ett äpple och kör programmet med denna policyfil och kontrollera att äpplet nu får koppla sig fritt var som helst på Internet. Redovisa policyfilen samt på en vanlig textfil §README.txt§ samtliga steg och kommandon som utförts. __ Exempel Ett exempel kan köras enligt ett av följande: - Starta äpplet lokalt via den egna datorn: -- Hämta filen: §[policy_1.txt, 05_ass/ip1/4/4.1.1/policy_1.txt]§ -- Hämta filen: §[BrowserCool.jar, 05_ass/ip1/4/4.1.1/BrowserCool.jar]§ -- Hämta filen: §[browser_cool.html, 05_ass/ip1/4/4.1.1/browser_cool.html]§ -- Kör med: §appletviewer -J-Djava.security.policy=policy_1.txt browser_cool.html§ - Starta äpplet via Internet: -- Hämta filen: §[policy_2.txt, 05_ass/ip1/4/4.1.1/policy_2.txt]§ -- Kör med: §appletviewer -J-Djava.security.policy=policy_2.txt http://atlas.dsv.su.se/~pierre/courses/05_ass/ip1/4/4.1.1/browser_cool.html§ - Starta äpplet via Internet och hämta även policy-filen via Internet: -- Kör med: §appletviewer -J-Djava.security.policy=http://atlas.dsv.su.se/~pierre/courses/05_ass/ip1/4/4.1.1/policy_2.txt http://atlas.dsv.su.se/~pierre/courses/05_ass/ip1/4/4.1.1/browser_cool.html§ Notera att policyfilerna är olika beroende på om man startar äpplet lokalt eller via Internet. Det sista sättet att starta äpplet är inte realistiskt om policyfilen inte är ens egen eftersom man då totalt förlorar kontrollen på vad äpplet får göra (det kan ju stå vad som helst i policyfilen). __ Tips Kontrollera först att äpplet fungerar med §appletviewer§ utan att använda policyfil. Var då noga med att surfa inom samma domän som äpplet laddades från, är det laddat via §http://atlas.dsv.su.se/ ... osv ...§ så kan man bara surfa på adresser som börjar på §http://atlas.dsv.su.se/ ... osv ...§, inte adresser med §http://www.dsv.su.se/ ... osv ...§. Om Du tidigare gjort ett HTML-dokument som enbart fungerar för en vanlig webbläsare så gör ett som fungerar för §appletviewer§. Skapa policyfilen med det i JDK inbyggda verktyget §policytool§: § policytool § Detta startar ett program med grafiskt användargränssnitt. Om man redan har en policyfil, säg §policy_1.txt§, och vill editera denna så kan man göra det med kommandot: § policytool -file policy_1.txt § Tänk på: - §CodeBase§ ska vara en URL: -- Det ska vara §/§ även under Windows -- På DSV har det varit problem med §~§ tecknet då man har fått §¨§ tecknet istället och en lösning är då att öppna policyfilen i en texteditor och ordna detta med den - Permissions kan vara svår att fylla i så här kommer lite hjälp: -- §SocketPermission = java.net.SocketPermission§ -- §TargetName = *§ -- §Actions = accept, connect, listen, resolve§ Se vidare [Oracle: Security, http://download.oracle.com/javase/1.5.0/docs/guide/security/]. __ Hjälp ~ 05_ass/help/01.txt > [Klicka här för hjälp, helper.dsv@gmail.com, IP Stationär: 4.1.1 Säkra program med funktionella restriktioner: http://people.dsv.su.se/~pierre/courses/i.cgi?href=05_ass/ip1/4.1.1.txt] < ~ 05_ass/help/02.txt