Как защитить файл, чтобы получить к нему доступ только через Java? - PullRequest
1 голос
/ 10 августа 2010

Хорошо, у меня есть папка, скажем ... http://oldserver.net/file/index.jar

Как мне защитить файл "index.jar" от загрузки из обычных веб-браузеров?

IЯ видел, как это было сделано ранее, я просто хочу защитить его от доступа к ним из веб-браузеров и сохранить его только для доступа к загрузке Java.

Что я имею в виду только для доступа к загрузке Java, я мог бы просто использоватьЗагрузчик Java для загрузки index.jar.Но я не могу загрузить его через веб-браузер.

Как бы я защитил файл "index.jar"?

Спасибо:)

Ответы [ 5 ]

6 голосов
/ 10 августа 2010

Вам нужно подумать о том, что конкретно означает это требование - с точки зрения вашего сервера, как он может определить, является ли входящий запрос "загрузкой Java" или нет?

Короче говоря, я не думаю, что есть способ сделать именно то, что вы ищете. Классическим способом защиты ресурсов является требование аутентификации (т. Е. Вам нужны действительные имя пользователя и пароль для получения файла index.jar), но это не похоже на то, что вам здесь нужно.

Имейте в виду, что Java просто отправляет HTTP-запросы (или другие протоколы, которые она знает, как говорить) по соединению. Любая другая программа может отправлять идентичные запросы , поэтому просто не существует способа применить этот лимит указанным вами способом.

Один из подходов, который может имитировать то, что вам нужно, - это не иметь index.jar доступным через HTTP, поэтому браузеры не смогут получить его по умолчанию, а затем получить к нему доступ через другой протокол в Java (например, FTP, SFTP, что угодно). Хотя, как уже упоминалось выше, любой инструмент, который может говорить на этом новом протоколе, сможет загрузить файл.

Другой подход заключается в поиске специфичных для Java заголовков, таких как поле User-Agent (при условии, что оно заполнено чем-то узнаваемым). Но опять же - это небезопасно, поскольку любой инструмент может отправлять через те же заголовки и выдавать себя за загрузку Java.


Если в своем вопросе вы имеете в виду, что вы хотите, чтобы ваши файлы загружались только специфичным Java-приложением, то все становится немного более осуществимым. Вы можете распространять приложение, содержащее некоторую аутентификацию (например, пару открытый / закрытый ключ), и иметь запрос на сервер для этого, когда запрашивается index.jar. Но даже в этом случае это сомнительно - по определению приложение Java должно содержать достаточно информации, чтобы аутентифицировать себя; и по определению вы должны распространять эту информацию публично; так что не составит труда извлечь секретные ключи и использовать маскарад другого приложения в качестве вашего Java.


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

1 голос
/ 14 июня 2012

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

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

В Java есть функцияустановить только для чтения:

File newTempFile=new File("mytext.txt");
newTempFile.setReadOnly();
1 голос
/ 10 августа 2010

Технически, вы не можете. Какой бы запрос HTTP Java ни делал, может быть создана другая клиентская программа HTTP, которая делает то же самое.

Однако вы можете сделать это немного сложнее. Вы можете поместить файл за HTTP-аутентификацией дайджеста и включить пароль в JAR-пароль программы Java или проверить серверный агент пользователя.

См. Например get_browser() и Apache 2 авторизация и аутентификация .

0 голосов
/ 10 августа 2010

Если ваш index.jar очень важен, не делайте его доступным для загрузки ни одним из упомянутых методов. Как только он будет доступен для скачивания и окажется на клиентском компьютере, внутри Java или нет, он будет взломан. Некоторый код должен выполняться только на сервере.

0 голосов
/ 10 августа 2010

Вы можете создать веб-приложение, которое обслуживает ваш файл. Здесь вы можете проверить строку агента пользователя в запросе и решить, будет ли эта строка агента пользователя обслуживать файл или нет. Чтобы это работало, ваш «загрузчик Java» должен иметь идентифицируемую строку пользовательского агента, и ваше приложение должно «знать» это. Конечно, любой плохой парень, который знает это, может заставить свой браузер отправлять вам ту же строку агента пользователя, так что это не очень безопасно: - /

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