Проблема с Java-апплетом для подключения нашего сервера для вызова файла PHP - PullRequest
0 голосов
/ 14 февраля 2011

Мы сталкиваемся с проблемой последних 22 и 23 обновлений JRE 6. Проблема в том, что мы запускаем сайт, который использует Java-апплет для хранения / извлечения данных путем вызова файла PHP. За последние 7 лет у нас никогда не было ни одной проблемы, но теперь с последней JRE у нас есть проблема. Апплет Java загружен нормально, но не смог подключиться к нашему серверу (Unix-серверу), который предполагает вызывать файл PHP.

Примечание. Мы используем Javascript для вызова функции Java для подключения к нашему серверу, для извлечения данных из файла PHP.

Вот сообщение об ошибке, найденное в консоли Java:

basic: Applet started
basic: Told clients applet is started
Retreiving cmi for sco=778 from ATutor server
network: Connecting http://www.example.com/training/scorm/read.php with proxy=DIRECT
network: Cache entry not found [url: http://xxx.xxx.xxx.xxx/crossdomain.xml, version: null]
network: Connecting http://xxx.xxx.xxx.xxx/crossdomain.xml with proxy=DIRECT
network: Connecting http://xxx.xxx.xxx.xxx:80/ with proxy=DIRECT
network: Server http://xxx.xxx.xxx.xxx/crossdomain.xml requesting to set-cookie with "SESSdba781ab68368f3b7b29ce28e33a2679=983ded5e21e40047871b1f3ce5c259d7; expires=Monday, 07-Mar-11 20:45:53 GMT; path=/"
ATutor cmi retrieval failed.
java.security.AccessControlException: access denied (java.net.SocketPermission xxx.xxx.xxx.xxx:80 connect,resolve)

Oracle выпустила заметку и решает эту проблему, Сайт: http://www.oracle.com/technetwork/java/javase/6u22releasenotes-176121.html

Исправление для CVE-2010-3560 может привести к некоторые апплеты Java, работающие в новый плагин Java, чтобы перестать работать, если они встроены в веб-страницы, которые содержат JavaScript, который вызывает в Java для выполнения действий, которые требовать разрешения безопасности сети. Эти апплеты могут потерпеть неудачу с сетью исключение безопасности под некоторыми обстоятельства, если имя службы который разрешил оригинальную веб-страницу Имя хоста URL не возвращает совпадающее имя как результат обратный поиск адресов. Это самое вероятно, произойдет для новой Java Плагин работает на Solaris и Linux когда настроено использовать NIS для хоста разрешение сетевых адресов с помощью карт содержащие имена хостов, которые находятся в краткая форма (а не как полностью доменное имя).

Если апплет подозревается в сбое благодаря этому изменению вы можете убедиться, что установив уровень регистрации Консоль Java до 5 и ищет регистрация строк, начинающихся с "socket ограничение доступа ", который будет опишите конкретную причину несоответствие и поможет в выявлении правильный обходной путь для использования в качестве описано ниже:

Добавление новой записи имени хоста в карту перенаправления. (в / etc / hosts, NIS или DNS) в специальная форма, которая признается Java с целью проверки Сопоставления службы имен IPv4 и IPv6. Форма общего имени IPv4, за которой следует пример фрагмента файла / etc / hosts для IP-адреса 10.11.12.13 это:

host.auth.ddd.ccc.bbb.aaa.in-addr.arpa

# /etc/hosts example
10.11.12.13    foo.bar.com.auth.13.12.11.10.in-addr.arpa

Существует эквивалентная форма для IPv6 адреса, использующие IP6.ARPA корневой формат домена, определенный в RFC 3596.

Для DNS это будет A (IPv4) или Записи AAAA (IPv6).

Предварительно дождаться полного имени хоста перед другими отображениями к тому же адрес. Например, в / etc / hosts Формат:

#10.11.12.13   foo loghost
10.11.12.13    foo.bar.com foo loghost  

Как альтернатива обновлению имени служебные записи, возможно безопасно изменить апплет для выполнения сетевое действие, использующее только его собственное разрешения не зависят от сети страница, которая содержит его с помощью doPrivileged () метода класс java.security.AccessController.

Я разработчик PHP, и у меня очень мало знаний о Java. Я не мог понять решение, предоставленное Oracle. Они хотят добавить новое имя хоста в файл / etc / hosts, может кто-нибудь объяснить более понятным примером, что добавить в /etc/hosts.

Также я не знаю, где добавить метод doPrivileged (), пожалуйста, помогите.

Спасибо

Ответы [ 2 ]

3 голосов
/ 25 февраля 2011

PAULO,

Администратор сервера загрузил файл crossdomain.xml в корневой веб-каталог сайта, который разрешает публичный ip. Это единственная информация, которую я получил.

Вот файл crossdomain.xml ,

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy>
   <allow-access-from domain="*" /> 
</cross-domain-policy> 

Это исправило проблему, и в журналах консоли Java не было ошибок.

Эти ошибки исправлены,

network: Cache entry not found [url: http://xxx.xxx.xxx.xxx/crossdomain.xml, version: null]


java.security.AccessControlException: access denied (java.net.SocketPermission xxx.xxx.xxx.xxx:80 connect,resolve)
3 голосов
/ 14 февраля 2011

Java-апплетам разрешено вызывать только свой собственный исходный хост, и кажется, что из-за изменений, упомянутых в приведенной выше цитате, код Javascript, вызывающий апплет, вообще не имеет сетевых прав, чтобы избежать того, что враждебные сценарии используют ваш апплет дляподключайтесь к вашему серверу с привилегиями апплета, а не с его собственным.

Если вы уверены, что при использовании метода апплета (даже если он был вызванскрипт), вы можете использовать в этом методе этот вызов AccessController.doPrivileged (...), например так:

public String retrieveData(final String params) {
   return AccessController.doPrivileged(new PrivilegedAction<String>() {
           public String run() {
               // here the rest of your networking code
           }
       };
}

Вместо того, чтобы оборачивать весь метод в doPrivileged, возможно, только обернуть сетевые части (например,openConnection () или такой).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...