Сделать URL недоступным для всех, кроме определенной веб-страницы

Для системы передачи файлов я храню данные на своем сервере. Доступ к данным можно получить с помощью URL, например:

http://filestorage.example.com/files/clientfiles/clientid/test.pdf

Все файлы в папке clientid / связаны на сгенерированной странице загрузки для клиента, например:

http://example.com/download.php?clientid=28692692846

Выше URL содержит веб-страницу с несколькими ссылками на все файлы в папке clientid:

<a href="http://filestorage.example.com/files/clientfiles/clientid/test.pdf" download>
test.pdf
</a>
...

Теперь я хочу ограничить доступ к файлам. Должен быть невозможен доступ к файлам извне, они должны быть доступны только из download.php.
Возможно ли вообще добиться чего-то подобного?

Файлы и скрипт находятся на одном сервере.

0

Решение

Вы можете положить .htaccess файл в этой папке, который содержит только:

deny from all

Таким образом, вы не можете открыть какой-либо файл из этой папки, но вы можете включить их в php без проблем.

0

Другие решения

Самый простой способ, которым я могу придумать для достижения этой цели, — это использовать уникальную переменную сеанса, сгенерированную для файлов в папке / clientid — независимо от того, для чего они предназначены, это были бы простые страницы PHP, которые загружали файлы через download.php.

session_start();
$_SESSION['file_id'] = $secret_file_id;
header("Location: http://example.com/download.php?clientid=28692692846");

Затем в файле download.php проверьте эту переменную.

session_start();
if((isset($_SESSION['file_id'])) && ($_SESSION['file_id'] == $secret_file_id)) {
// Offer file for download
} else {
//Not referred from correct URL, reject.
}
0

Да, вы можете достичь этого через .htaccess с помощью:

order deny,allow
deny from all
allow from example.com/download.php

Это запретит всем доступ, если они не посещают через example.com/download.php,

Если вы используете Apache 2.4, вам нужно будет использовать:

Require all denied
Require host example.com/download.php

Очевидно, вам нужно будет разместить .htaccess файл в папку, к которой вы хотите ограничить доступ тоже. Так что, если я правильно понимаю вашу файловую структуру, это будет /clientid/

0
По вопросам рекламы [email protected]