Jump to content

Права доступа к файлам


sergej-s38
 Share

Recommended Posts

Здравствуйте. Подскажите, пожалуйста.

Ситуация:

На сайте-одностраничнике доступ только зарегистрированым. На этой странице они могут скачивать файлы (они на этом же сервере в отдельной папке). Ссылка на загрузку имеет вид - http://sait.ru/pdf/fail.pdf.

Проблема:

Ссылка доступна всем через запрос в адресной строке браузера. Вот это и надо запретить.

Вопрос:

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

Я пробовал выставлять права доступа к каталогу с файлами и к самому файлу на 0750.

А может быть в хт-акцесс можно как-то запрет сделать?

Link to comment
Share on other sites

При таком способе отдачи вполне время работы php-скрипта может истечь до того как файл будет отдан. Я не знаю как там работает кэширование, но если файл большой или скорость маленькая, то такое может произойти. Один из вариантов — делать симлинк на нужный файл и давать ссылку на него. Через некоторое время ,пару часов, например, удалять его.

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

При таком способе отдачи вполне время работы php-скрипта может истечь до того как файл будет отдан. Я не знаю как там работает кэширование, но если файл большой или скорость маленькая, то такое может произойти. Один из вариантов — делать симлинк на нужный файл и давать ссылку на него. Через некоторое время ,пару часов, например, удалять его.

Это какой-то просто зверский файл должен быть, чтобы так случилось. PHP отдаст файл веб-серверу и заткнётся, так что для обычных файлов — вполне себе способ.

Link to comment
Share on other sites

PHP отдаст файл веб-серверу и заткнётся, так что для обычных файлов — вполне себе способ.

Обычные файлы это не очень большие по размеру? Какой максимальный размер (примерно) файла, чтобы нормально работало?

отдавайте файл через php

например ссылка http://sait.ru/downl...p?file=file.pdf

в php проверяйте авторизацию пользователя и если авторизован отдавайте файл для скачивания.

На страницу с ссылками доступ уже только авторизованным, т.е. пользователь уже проверен.

А этот даунлоад.пхп, я так понимаю, должен теперь просто проверять откуда запрос к конкретному файлу (?file=file.pdf) идет?

Логика скрипта:

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

Я не ошибаюсь?

А доступ через прямой запрос в адресной строке пропадет разве?

Спасибо всем.

Edited by sergej-s38
Link to comment
Share on other sites

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

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

прямые ссылки можно закрыть несколькими способами:

- вынести все файлы за пределы documentroot

- настроить в .htaccess - примерно так


<FilesMatch "\.pdf$">
deny from all
</FilesMatch>

Edited by Zippovich
Link to comment
Share on other sites

попробуйте показать нам ошибку

...ошибка? Выдает 403 (при попытке скачать по ссылке с сайта или через адрес-строку) - доступ запрещен или нет индекс-файла. Просто когда сделал хтакцес, вообще перестал файл скачиваться, а надо чтобы не скачивался только когда не с сайта к нему запрос идет.

Link to comment
Share on other sites

?

я писал ведь эти изменения к тому, что бы Вы закрыли доступ к файлу вообще, только для php разрешен доступ

а Вы выдрали часть решения у меня и делаете по своему

уберите тогда и делайте как хотите

Link to comment
Share on other sites

...ошибка? Выдает 403 (при попытке скачать по ссылке с сайта или через адрес-строку) - доступ запрещен или нет индекс-файла. Просто когда сделал хтакцес, вообще перестал файл скачиваться, а надо чтобы не скачивался только когда не с сайта к нему запрос идет.
Вообще-то, серверу без разницы с чего ему идёт запрос. Ему пришло GET /filename HTTP/1.1 .. Site: site.ru, он отдал файл. А уж на сайте ссылка была или человек из избранного зашёл, роли не играет. Вверху было приведено два различных решения, можно выбрать любое.
Link to comment
Share on other sites

?

я писал ведь эти изменения к тому, что бы Вы закрыли доступ к файлу вообще, только для php разрешен доступ

а Вы выдрали часть решения у меня и делаете по своему

уберите тогда и делайте как хотите

Я понял, спасибо. Я, просто, Вас не правильно понял.

Все-таки дело в коде php.

Не сердитесь, пожалуйста.

Я попробую с помощью Ваших советов сделать все заново.

Спасибо за помощь

...ошибка? Выдает 403 (при попытке скачать по ссылке с сайта или через адрес-строку) - доступ запрещен или нет индекс-файла. Просто когда сделал хтакцес, вообще перестал файл скачиваться, а надо чтобы не скачивался только когда не с сайта к нему запрос идет.
Вообще-то, серверу без разницы с чего ему идёт запрос. Ему пришло GET /filename HTTP/1.1 .. Site: site.ru, он отдал файл. А уж на сайте ссылка была или человек из избранного зашёл, роли не играет. Вверху было приведено два различных решения, можно выбрать любое.

Т.е. реально, все-таки, сделать?

Предыдущие варианты сам сделать пока не могу, но постараюсь. Поищу в мануалах и книгах.

Наверное, дело, все-таки, в коде. Постараюсь исправить или переписать так, чтобы и не отражалось ни на чем, и работало.

Спасибо Вам за помощь.

Ему пришло GET /filename HTTP/1.1 .. Site: site.ru, он отдал файл.

А можно об этом поподробней?

Сервер получил имя файла такое-то... он отдает его куда прога показывает (на скачку или не отдает).

А что при этом происходит конкретно?

Может сервер настройки какие иметь должен? Я имею ввиду настройки не стандартные.

  • Like 1
Link to comment
Share on other sites

Если web-сервер получает запрос на получение файла, он считывает этот файл и отправляет содержимое в сокет. Поэтому тебе и предложили проверять права на чтение файла через промежуточное звено — читалку на php, которая тоже будет читать и отдавать web-серверу, чтобы тот отдал в сокет.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy