Безопасность песочницы Java Applet, локальный и внешний доступ

У меня была ошибка в нашем (подписанном кодом) java-апплете «отказано в доступе (java.net.SocketPermission xxxx: 443 connect_resolve». У нас была кнопка html «сохранить», которая вызывала (через javascript) метод апплета для сохранения файла, загружается в апплет на веб-сервер.После некоторых обширных исследований в Google я исправил это, обернув код метода сохранения нашего апплета в doPrivileged().Ошибка, кажется, исправлена, люди счастливы.

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

Что меня особенно смущает, так это то, что мы тщательно тестировали наш апплет на тестовом сервере в нашей внутренней сети и никогда не получали эту ошибку, пока не попытались нажать кнопку «Сохранить» javascript с клиентского компьютера, внешнего по отношению к нашей сети. Итак, на данный момент я просто делаю обоснованное предположение: именно так работает механизм песочницы java-апплета.

Это правда? Пока клиентский апплет получает доступ к ресурсам веб-сервера с клиентского компьютера, находящегося в той же доменной сети, он считается в стенах песочницы? И если клиентская машина является внешней по отношению к локальной сети веб-сервера, запрос апплета считается за пределами стен песочницы и требует doPrivileged? Или здесь есть другое объяснение, которое мне не хватает?

Я не смог найти ничего в документации Sun или через Google, что конкретно доказывает или опровергает мое утверждение. Разъяснение от кого-то с большим опытом работы с Java-апплетами приветствуется.


person sross    schedule 31.01.2011    source источник
comment
По умолчанию апплет должен подключаться только к тому серверу, с которого он был загружен. Поэтому я думаю, именно поэтому вам понадобилось привилегированное действие, но это только предположение.   -  person biziclop    schedule 01.02.2011


Ответы (1)


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

Если под этим вы подразумеваете, что апплет в песочнице может «звонить домой» на свой собственный сервер, тогда да.

И если клиентская машина является внешней по отношению к локальной сети веб-сервера, запрос апплета считается за пределами стен песочницы и требует doPrivileged?

Аплету требуется доверие (цифровая подпись + принятие конечным пользователем) для доступа к ресурсам с других серверов. Еще больше усложняет это JavaScript. Внезапно появляется «ненадежный» элемент, который должен быть рассмотрен JRE. Оборачивая код в метод doPrivileged(), мы сообщаем JRE, что этому коду следует доверять, даже если он вызывается чем-то другим, например JS.

person Andrew Thompson    schedule 31.01.2011
comment
Итак, я думаю, что я спрашиваю, предполагает ли апплет это доверие, если он находится в той же локальной сети, что и веб-сервер, которому он принадлежит? Первоначально я не получал эту ошибку, когда нажимал кнопку сохранения javascript на своем рабочем компьютере, который находится в той же сети, что и наш веб-сервер. Но я бы получил ошибку, если бы нажал кнопку сохранения javascript на своем домашнем компьютере, который не находится в той же сети, что и веб-сервер. Спасибо за быструю помощь, очень признателен! - person sross; 02.02.2011
comment
Ответ на наш вопрос — «да», JRE предполагает, что все в порядке. Я не думаю, что даже взаимодействие с JS будет проблемой (как следует из вашего отчета). - person Andrew Thompson; 02.02.2011
comment
Чудесно! Большое спасибо, что помогли мне разобраться во всем этом! - person sross; 02.02.2011