Мне интересно, как сделать сервер загрузки более надежным … На данный момент у меня есть сервер, на https, хранящий zip-файлы, названные со случайным хешем, проиндексированные моей базой данных. Содержащий каталог не разрешает листинг (htaccess), чтобы избежать ручной загрузки, непосредственно просматривая каталог на сервере.
Java-приложение отображает описание файлов, и если пользователь хочет его скачать, он просто нажимает на кнопку «скачать». Приложение Java, если этому пользователю разрешено загружать, отправляет учетные данные в мой PHP-скрипт на сервере, PHP-скрипт проверяет их, снова проверяет, разрешено ли самому пользователю загружать этот файл, получает файл filename.zip из БД, проиндексированной идентификатор файла, который пользователь хочет загрузить, и возвращает это имя файла. Приложение Java читает это имя файла и загружает файл, используя
Url url = new URL("https://myserver.com/assets/theAssetToDownload.zip")
URLConnection urlConn = url.openConnection();
InputStream is = urlConn.getInputStream();
FileOutputStream fos = new FileOutputStream("test.zip");
byte[] buffer = new byte[4096];
int len;
while ((len = is.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
(сокращенный код, нужно попробовать / поймать, is / fos.close () и т. д. и т. д.)
Пока все хорошо, работает хорошо … Но … Если кто-то введет в браузер прямой URL, файл также будет загружен, без четкой проверки на авторизацию …
Поэтому я подумал: эй, не позволяйте никому, кроме PHP-скрипта, получить доступ к каталогам ресурсов! Опять же, это простой htaccess.
Но как тогда скачивается загрузка?
Будет ли это заголовок и вывод в моем PHP-скрипте, например:
header("Content-type: application/octet-stream");
header("Content-disposition: attachment;filename=test.zip");
readfile(test.zip);
В таком случае, как мне прочитать это со стороны Java? Также с getInputStream ()?
Я понимаю, что этот вопрос является общим. Я искал информацию, но мне бы хотелось немного света в тумане, способ сделать это безопасно …
Спасибо всем, кто пытается помочь / посоветовать мне!
Вы можете хранить файл где-то, недоступном из Интернета, но все же доступным для чтения веб-серверу, а затем с помощью htaccess направлять все запросы в ваш php-скрипт. Объедините это с тем, что у вас уже есть (заголовки, вывод с readfile) и авторизацией, и так и должно быть.
Других решений пока нет …