Загрузка файла .jar на веб-страницу без доступа пользователя - PullRequest
0 голосов
/ 17 октября 2011

Трудно объяснить в одной строке, но моя проблема в основном так:

Я создал Java-апплет, который хочу запускать на веб-странице, которую я упаковал в файл .jar. Я могу заставить апплет работать нормально, используя тег , но проблема в том, что если пользователь просматривает исходный код страницы, он увидит:

<applet archive="directory/program.jar">

При условии, что файлы .jar можно легко открыть и все файлы классов декомпилированы, все, что нужно сделать пользователю, это зайти на www.url.com/directory/program.jar, чтобы загрузить мой .jar, и у них будет все мое исходный код :(

Поэтому мне интересно, есть ли способ защитить мой код / ​​jar от декомпиляции (кроме обфускации) или использовать какой-нибудь сценарий на стороне сервера для передачи содержимого .jar напрямую в браузер с сервера местоположение на стороне не публично видно.

Любая помощь приветствуется.

Ответы [ 4 ]

4 голосов
/ 17 октября 2011

Это принципиально невозможно.

Java-апплеты запускают клиент.
Все, что работает на клиенте, может быть разобрано и изменено достаточно опытным пользователем.

Вы должны перенести свою чувствительную логику на сервер и вызвать ее, используя HTTP-запросы (и помните, что пользователь может использовать Fiddler).
Пока вы занимаетесь этим, вам, вероятно, следует заменить свой апплет HTML и Javascript.

0 голосов
/ 17 октября 2011

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

Вы можете запретить прямой просмотр вашего .jar файла, расположив его под каталогом WEB-INF в вашем WAR-файле. Это также предотвратит работу <applet archive="directory/program.jar">.

Как только jar находится под каталогом WEB-INF, вам понадобится что-то, чтобы передать ресурс браузеру клиента; сервлет ресурсов Spring хорош для этого (если вы используете Java и Spring). Я уверен, что существуют другие подобные инструменты. С помощью сервлета Sprint Resours ваш апплет будет развернут примерно так: <applet archive="resource/program.jar".

Если вы напишите собственного дистрибьютора ресурсов, вы можете добавить защиту, чтобы было труднее получить jar-файл; возможно, добавьте заголовок к вашим запросам, например IRGud: <user_id here>, и не выполняйте любой запрос, который не имеет этого заголовка (или допустимого содержимого в заголовке).

0 голосов
/ 17 октября 2011

За исключением запутывания или шифрования, браузер получит доступ к банке тем или иным способом.

Возможно, вы сможете создать апплет, который загружает больше функций во время выполнения.

0 голосов
/ 17 октября 2011

Нет эффективного способа заблокировать доступ к исходному коду любой страницы; чтобы страница была читаема браузерами и поисковыми системами, исходный код должен быть доступен, и, следовательно, его можно просматривать и / или копировать. Вот так работает веб. HTML отправляется как текстовый документ и интерпретируется на стороне клиента.

Отключение щелчка правой кнопкой мыши немного раздражает, и время от времени оно работает в альтернативных браузерах. Даже если вам это удастся, опция View Source в меню всегда присутствует. Зритель может также использовать инструмент загрузки, такой как Wget , или даже получить страницу из кэша Google, не посещая ваш сайт вообще.

Редактировать: Упс! Я неправильно понял ваш вопрос. Вы должны следовать совету @SLaks и "переместить вашу чувствительную логику на сервер и вызывать ее, используя HTTP-запросы (и помните, что пользователь может использовать Fiddler)."

...