Почему Java говорит мне, что мой апплет содержит как подписанный, так и неподписанный код?
Мой подписанный Java-апплет работает нормально до обновления Java 19. Теперь некоторые, но не все наши пользователи в Java Update 19 сообщают о сообщении безопасности Java, в котором говорится, что наш апплет содержит как подписанный, так и неподписанный код.
Процесс создания нашего апплета выглядит следующим образом:
- Очистите и создайте проект апплета в среде NetBeans.
- Откройте файл баннера апплета в WinRAR и добавьте необходимые файлы .class в JAR файл mysql JDBC в файл jar.
- Подпишите файл аппликации апплетов.
Может кто-нибудь скажет мне, как определить, какой код подписан и какой код не подписан в нашем апплете? Есть ли лучший способ включить jar файл драйвера mysql JDBC в наш апплет, кроме копирования содержимого файла jar в наш файл jar-апплета?
Спасибо
Ответы
Ответ 1
Некоторые вещи, которые нужно попробовать:
- Перейдите в панель управления плагином java ($ JAVA_HOME/bin/ControlPanel).
- Перейдите на вкладку
Advanced
.
- Развернуть
Debug
- Проверьте
Enable tracing
, Enable logging
и Show applet lifecycle exceptions
- Развернуть
Java console
- Отметьте
Show console
- Нажмите
OK
(или Close
, в зависимости от вашей ОС)
Когда ваш апплет загрузит консоль Java, откроется. Нажмите на него и сразу нажмите "5". Он будет записывать банки и классы, которые будут загружены для запуска вашего апплета. Где-то в этом случае должно быть сообщение, указывающее, какие банки или классы считаются "неподписанными". Если вы пропустите его в первый раз, просто перезагрузите окно, чтобы попробовать его снова.
Ответ 2
EDIT: из-за ошибки в Java 7 Update 45 вам не следует добавлять Trusted-Library в ваш файл манифеста. Просто добавьте новый атрибут Caller-Allowable-Codebase. См. Этот вопрос для получения дополнительной информации: манифест Java-апплета - разрешить всю допустимую-кодовую базу
Обновление Java 7 Update 21 было выпущено 16 апреля 2013 года, и наш апплет начал показывать это диалоговое окно.
В примечаниях к выпуску:
Начиная с JDK 7u21, код JavaScript, вызывающий код в привилегированном апплете, рассматривается как смешанный код, а предупреждения предупреждаются, если подписанные файлы JAR не помечены атрибутом Trusted-Library.
Чтобы исправить это, отредактируйте файл manifest.mf и добавьте следующую строку:
Trusted-Library: true
Вы должны быть очень осторожны, прежде чем делать это. Если ваш подписанный апплет можно вызывать из javascript, злоумышленник может потенциально сделать вредные вещи на компьютерах своих пользователей.
Одним быстрым способом защитить ваш апплет является предотвращение его запуска на других веб-сайтах. Сделайте это, поместив код в метод init()
, который смотрит на getCodeBase().getHost()
, и выдает исключение, если оно не соответствует вашему сайту.
Обновление Java 7 25 предлагает другой способ ограничить сайты, на которых может быть запущен ваш апплет. Вы можете установить атрибут Codebase в файле манифеста следующим образом:
Codebase: test.example.com www.example.com
Обновление Java 7 Update 45 (выпущено 16 октября 2013 г.) вводит дополнительные изменения в систему LiveConnect (мост javascript-to-applet), которые могут вызвать другое приглашение. В этой статье рассказывается о изменениях 7u45: https://blogs.oracle.com/java-platform-group/entry/liveconnect_changes_in_7u45
В принципе, вы также захотите добавить следующее в файл манифеста, чтобы избежать подсказок:
Caller-Allowable-Codebase: test.example.com www.example.com
Если вы продаете продукт, который включает апплет, и вы не знаете, какие домены он может быть развернут, вы можете заполнить здесь *.
Ответ 3
Смешение надежного и ненадежного кода вместе является уязвимостью, которая была исправлена в 6u19 (текущий выпуск CPU/SSR на момент написания). См. документы. Блокирование соединения или использование отладчика должно показать, где проблема.