Aplety, metoda getCodeBase()

0

Zauważyłem dzisiaj dziwny objaw w napisanych dawno temu apletach. Objaw dotyczy wartości zwracanej przez metodę getCodeBase():

  • dla apletów "zdalnych" zwraca coś w rodzaju "http://...",
  • dla apletów lokalnych uruchamianych w apletviewerze zwraca coś w rodzaju "file:/C:...",
  • dla apletów lokalnych uruchamianych w przeglądarce (sprawdziłem w ff, operze i chromie) zwraca null.
    To ostatnie zachowanie jest nowe i nieoczekiwane, możecie sprawdzić u siebie?
0
  1. jaka wersja Javy
  2. jaka wersja przeglądarki
  3. jak wyłączasz zabezpieczenie przed odpalaniem apletów z dysku
  4. w którym momencie wołasz getCodeBase()

W moim przypadku:

  1. JSE7_U21
  2. Firefox 21
  3. javacpl->Security->Security Level = Medium
  4. W Applet.init()

getCodeBase() zwraca poprawną wartośc.

0
  1. SE 1.7.0_25-b17
  2. ff 21.0, chrome 27.0.1453.116 m, opera 12.14, sprawdziłem jeszcze w ie 8.0.6 też jest null
  3. tak samo jak u Ciebie
  4. w init() (żeby odczytać obrazki metodą getImage()).
    Zauważ, że aplety ściągane z sieci działają poprawnie (Również te napisane przez mnie, z którymi lokalnie mam problem. Jeśli odczytanie obrazka jest istotne dla działania apletu, to nie uruchamia się on zupełnie, w przeciwnym razie uruchamia się wybrakowany aplet).
0

Na 25 ten sam shit. Wygląda na bug.

0

Kod Plugin2Context po dekompilacji
[code] public URL getCodeBase()
{
URL localURL = this.plugin_mgr.getCodeBase();
if (localURL != null)
{
String str = localURL.getProtocol();
if ((str != null) && (str.equalsIgnoreCase("file")))
localURL = null;
}
return localURL;
}
[/code]
Wyglada jednak na celowe zachowanie.

Wcześniej wyglądało to tak:
[code] public URL getCodeBase()
{
return this.plugin_mgr.getCodeBase();
}
[/code]

//PS
http://comments.gmane.org/gmane.comp.java.openjdk.security.devel/7884
Czyli fix na któryś vulnerability.

0

W podpisanym aplecie można obejść ten fix nadpisując metodę getCodeBase.

    public URL getCodeBase()
    {
        try
        {
            String s = "file:"+getDocumentBase().getPath();
            int index = s.lastIndexOf("/");
            s = s.substring(0,index);
            return new URL(s);
        }
        catch(Exception e)
        {
            return null;
        }
    }

Edit. Uprzedzając ewentualne komentarze, zamieszczony kod jest celowo niekompletny.

1 użytkowników online, w tym zalogowanych: 0, gości: 1