Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> grant, Для подписанного апплета 
:(
    Опции темы
sergejzr
Дата 28.11.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Ок, проблема вкратце:
У меня апплет, он должен уметь:
Читать/писать файлы в определённые директории
Читать property

Вот в принципе и всё.  Дополнительно грузятся куча необходимых lib'ов У меня есть чем подписывать - это наш официальный университетский сертификат.

Хочется сделать всё так, чтобы у юзера не было необходимости менять java.policy или же на крайняк чтобы изменения были минимальны.
Сейчас апплет работает, если из java.policy сделать:
Код

grant{
    permission java.security.AllPermission;
};

Напомню, стандартный java.policy выглядит так:
Код


// Standard extensions get all permissions by default

grant codeBase "file:${{java.ext.dirs}}/*" {
    permission java.security.AllPermission;
};

// default permissions granted to all domains

grant { 
    // Allows any thread to stop itself using the java.lang.Thread.stop()
    // method that takes no argument.
    // Note that this permission is granted by default only to remain
    // backwards compatible.
    // It is strongly recommended that you either remove this permission
    // from this policy file or further restrict it to code sources
    // that you specify, because Thread.stop() is potentially unsafe.
    // See "http://java.sun.com/notes" for more information.
    permission java.lang.RuntimePermission "stopThread";

    // allows anyone to listen on un-privileged ports
    permission java.net.SocketPermission "localhost:1024-", "listen";

    // "standard" properies that can be read by anyone

    permission java.util.PropertyPermission "java.version", "read";
    permission java.util.PropertyPermission "java.vendor", "read";
    permission java.util.PropertyPermission "java.vendor.url", "read";
    permission java.util.PropertyPermission "java.class.version", "read";
    permission java.util.PropertyPermission "os.name", "read";
    permission java.util.PropertyPermission "os.version", "read";
    permission java.util.PropertyPermission "os.arch", "read";
    permission java.util.PropertyPermission "file.separator", "read";
    permission java.util.PropertyPermission "path.separator", "read";
    permission java.util.PropertyPermission "line.separator", "read";

    permission java.util.PropertyPermission "java.specification.version", "read";
    permission java.util.PropertyPermission "java.specification.vendor", "read";
    permission java.util.PropertyPermission "java.specification.name", "read";

    permission java.util.PropertyPermission "java.vm.specification.version", "read";
    permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
    permission java.util.PropertyPermission "java.vm.specification.name", "read";
    permission java.util.PropertyPermission "java.vm.version", "read";
    permission java.util.PropertyPermission "java.vm.vendor", "read";
    permission java.util.PropertyPermission "java.vm.name", "read";
};

Но это конечно юзеру не продать. smile
Ну, чтение небходимой property я успешно добавил строкой
permission java.util.PropertyPermission "user.dir", "read";

А вот с файлами как-то не очень получается. Хотел бы конечно дать права только на определённый домен, но почему-то не получается. Может кто-то знает, как дать права хотя бы на localhost?



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
LSD
Дата 29.11.2007, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Цитата(sergejzr @  28.11.2007,  11:47 Найти цитируемый пост)
А вот с файлами как-то не очень получается. Хотел бы конечно дать права только на определённый домен, но почему-то не получается. Может кто-то знает, как дать права хотя бы на localhost?

О каком домене идет речь? Домен Windows?

Вообще FilePermission дает права на чтение только из локальной ФС, ну или то что подмотированно как локальные диски.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Alexandr87
Дата 29.11.2007, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 5
Всего: 39



sergejzr, функции апплета через Java-script используете?

Если policy файл не менять, то по-идеи, при загрузке, апплет должен спросить пользователя, доверяет ли он сертификату, с помощью которого был подписан апплет (Если сертификат уже не находится в списке доверенных). После того, как пользователь утвердительно ответит, апплет сможет работать , как простое Java-приложения со всем соответсвующими правами доступа к файловой системе и т.д.  У вас работает?

Если вы не используете выхов функций апплета из Java-script, дальнешая информация, скорее всего, не поможет решить вам вашу проблему.
Если же функции вашего апплета вызываются из Java-script (с помощью технлогии Live-Connect), то даже если пользователь ответит, что доверяет вашему сертификату, менеджер безопасности будет считать такие функции "не доверенными". И никакие гранты в policy файле (кроме AllPermisions) не разубедят его в обратном. (По крайней-мере, у меня не получлось).
Как вы сами понимаете, заставлять пользователя вносить в его policy файл подобные изменения (добавление AllPermisions) не разумно. На всякий случай поясню, это означает, что любой апплет будет запускаться с полными правами, даже не уведомив об этом пользователя.
Но, решение есть!
Оно заключается в том, что небезопасные функции нужно запускать в отедльном потоке, а не в том, потоке, в котором испольняется функция, которая была вызывана из Java-script.

небольшой кусок кода, демонстрирующий, что я хотел сказать. Нашел свой старый апплет, вроде он работал ).
Код

import java.applet.Applet;
import javax.swing.SwingUtilities;

public class InstallerApplet extends Applet {
    
    private String install_result = null;
    
    // work without java.policy grants
    Runnable runn = new Runnable() {
        public void run() {
            install_result = _install();
        }
    };
    
    public String _install() {

        try {
            //.....
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
        return "OK";
    }
    
    public String install() {
        try {
            SwingUtilities.invokeAndWait(runn);
            return install_result;
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
        return "ERROR";
    }
    
}


Надеюсь, я правильно угадал причину такого поведения менеджера безопасности и информация оказалась полезной. 


Это сообщение отредактировал(а) Alexandr87 - 29.11.2007, 09:23
PM Jabber   Вверх
sergejzr
Дата 29.11.2007, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Alexandr87, огромное спасибо! На самом деле я уже не знал что делать! Действительно, половина функций работала, половина нет. Возможно я бы никогда не догадался, что дело в том, что определённые функции вызываются скриптом! Теперь я знаю в чём проблема и попробую обойтись без вызова "критичных" методов т.е. попробую переложить их логику в init (Там то всё выполняется). Ну конечно спасибо за пример! Возможно не получится всё передать апплету и буду использовать Ваш пример!


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Stampede
Дата 29.11.2007, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 1
Всего: 144



sergejzr, для того чтобы вызывать методы апплета из JavaScript'а так, чтобы они не блокировались менеджером безопасности, есть еще один трюк - возможно, более удобный, чем выполнение нужной функции в отдельном потоке, поскольку позволяет возвращать результат синхронным образом. Суть фишки - в методе doPrivileged(): 

Код

public String exec(final String cmd) {
    return java.security.AccessController.doPrivileged(
        new java.security.PrivilegedAction<String>() {                        
            public String run() {                            
                try {
                    Runtime.getRuntime().exec(cmd);
                    return "success";
                }                
                catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
        }
    );
}


Работает как часы smile


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
sergejzr
Дата 29.11.2007, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



По удобству оба способа примерно одинаковы, но второй возможно более правильный, спасибо!


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Апплеты | Следующая тема »


 




[ Время генерации скрипта: 0.0613 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.