2010-05-13 3 views
1

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

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

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

grant { 
permission java.security.AllPermission; 
}; 

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

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

[1] Can't get AllPermission configured for intranet applet. Can anyone help?

+0

В этом комментарии 'doPrivileged' ссылается на апплет, вызываемый JavaScript через LiveConnect. Будьте предельно осторожны с 'doPrivileged' и с надежным кодом в целом. –

+0

Да, но это указывает на то, что doPrivileged() делает -anything-special при работе под AllPermission, о котором я утверждаю, это не должно. – nahsra

ответ

1

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

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

+0

К сожалению, этот апплет не вызывается через JavaScript/LiveConnect и т. Д., Поэтому эти элементы не должны быть найдены в стеке. Btw, hai! – nahsra

+0

Если апплет не вызывается с помощью JavaScript, вы можете предоставить ему AllPerrmissions своим URL-адресом в файле политики. Я проверил, что он работает в Firefox и Safari на Mac OSX. Может быть, это ваш браузер, который плохо себя ведет? И что случилось :) – alsmola

+0

В этом суть вопроса - указание URL-адреса не работает. Может быть, этот древний Mac JDK имеет к этому какое-то отношение. = P Я запускаю 1.6.0u16, и я тестировал его через IE/Firefox/Chrome. – nahsra

Смежные вопросы