Как предоставить апплету сайта привилегию AllPermission? - PullRequest
1 голос
/ 13 мая 2010

Я бы хотел указать определенные апплеты для запуска с java.security.AllPermission на моем компьютере (для отладки и тестирования безопасности). Однако я не хочу включать все апплеты, которые я запускаю, чтобы получить это разрешение. Таким образом, редактируя мой пользовательский файл политики Java (который, как я убедился, является правильным файлом политики при тестировании), я пытаюсь указать это значение:

grant codeBase "http://host_where_applet_lives/-" {
 permission java.security.AllPermission;
};

Это значение не срабатывает, когда апплет пытается сделать что-то мощное (в моем случае создайте новый поток). Однако, когда я поставил следующее значение:

grant {
 permission java.security.AllPermission;
};

Апплет способен выполнять мощную операцию. Единственное отличие - отсутствие атрибута codeBase.

Ответ на аналогичный вопрос, заданный здесь [1], предположил (но никогда не показывает или не доказывает), что AccessController.doPrivileged() звонки могут потребоваться. Для меня это звучит неправильно, так как мне не нужен этот вызов, когда я даю разрешения всем апплетам (второй пример, который я показал). Даже если это решение, засорять апплеты, которые я запускаю с помощью вызовов AccessController.doPrivileged(), не легко или не обязательно возможно. В завершение мои тесты показывают, что это все равно не работает. Но я рад услышать больше идей об этом.

[1] Не удалось настроить AllPermission для апплета интрасети. Кто-нибудь может помочь?

1 Ответ

1 голос
/ 13 мая 2010

Ответ на аналогичный вопрос , на который вы ссылались, предполагает, что вызов кода апплета Java из JavaScript может привести к SecurityException, поскольку AccessController выполнит проверку стека и завершится неудачно из-за ненадежного JavaScript. Я опробовал код и, конечно же, Firefox не будет запускать апплет, вызываемый JavaScript, без вызова doPrivileged(), но Safari будет (по крайней мере, в Mac OSX).

Если вы вызываете свой апплет из JavaScript, вы можете попробовать вместо этого использовать метод Applet.paint() для автоматического вызова вашего апплета. Или вы можете использовать метод doPrivileged() для короткого замыкания проверки стека и предоставить себе любые необходимые привилегии. Конечно, тогда любой ненадежный код сможет вызвать ваш привилегированный код.

...