Разрешить загрузку и просмотр, но запретить загрузку

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

У меня есть загрузчик файлов на моем сайте, который работает с php. Папка, в которую загружаются файлы, имеет 777 chmod. У меня также есть php-скрипт для отображения файлов в этой папке. Мне нужно разрешить php загружать и просматривать файлы в этой папке, но не позволять людям делать это. Единственное решение, которое я придумал, - это передать эту папку другому пользователю, отличному от значения по умолчанию, чтобы позже я мог выполнить chmod в filezilla и разрешить это делать только владельцу, чтобы люди могли видеть файлы через вывод php-скрипта, но не в том случае, если они перейдите в эту папку.

Я использую Debian, apache2. Я хотел бы знать, что я могу сделать.

Короче говоря, моя цель: разрешить php загружать, читать, записывать и выполнять файлы в этой папке, но не клиентам, если они не используют мой php-скрипт.

заранее спасибо


person Karevan    schedule 06.06.2012    source источник


Ответы (2)


Поместите все файлы, о которых вы говорите, в их собственный каталог. Добавьте файл .htaccess в этот каталог. Содержимое .htaccess должно быть deny from all.

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

Для получения дополнительной информации о том, как подать файл для загрузки в PHP, прочитайте это: https://serverfault.com/questions/316814/php-serve-a-file-for-download-without-providing-прямая-ссылка

person xbonez    schedule 06.06.2012
comment
Не могли бы вы объяснить мне, что вы имеете в виду под их собственным каталогом? Я пробовал с файлом .htaccess, но я все еще могу скачать файлы по прямой ссылке. Я не хочу обслуживать загрузки в любом случае. Я просто хочу показать, что находится в этой папке с помощью php-скрипта (уже сделано). Но я не хочу, чтобы кто-то мог скачать их каким-либо образом, просто загрузить. - person Karevan; 07.06.2012
comment
Если вы поместите файл htaccess в каталог с deny from all, все файлы в этом каталоге больше не будут доступны. - person xbonez; 07.06.2012
comment
Извините за настойчивость, но у меня это не работает, я добавил .htaccess в папку, где находятся мои файлы, с запретом на все без кавычек, но я все еще могу загружать файлы из браузера. - person Karevan; 07.06.2012
comment
Проверьте настройки apache, чтобы убедиться, что он ищет файлы htaccess и разрешает переопределения. Подробнее см. здесь: forums.devshed.com /apache-развитие-15/ - person xbonez; 07.06.2012
comment
Извините, что принял ваш ответ с опозданием, потребовалось много времени, чтобы включить переопределения, но ваш ответ помог мне, поэтому я принимаю его :) Спасибо за помощь - person Karevan; 07.06.2012

Все службы, включая веб-серверы, работают в контексте безопасности, который является учетной записью в ОС, например, apache начинает использовать пользователя apache в группе apache. Достаточно изменить режим и изменить владельца на этого пользователя и группу. Никогда не меняйте каталог на 777, пока этому не будет хорошего объяснения. Используя этот трюк, процесс веб-службы может читать, писать и выполнять только в этом каталоге.

Кроме того, если вы хотите, чтобы клиенты браузера не видели (читали) содержимое этого каталога, вы должны запретить листинг в этом каталоге. Я думаю, что он отключен по умолчанию.

person Kamran Amini    schedule 06.06.2012
comment
мой каталог: mapuploader, поэтому я должен просто: chown -R apache mapuploader? :с - person Karevan; 07.06.2012
comment
Я понял. да. Сначала вы должны указать его пользователю apache. chown -R apache apache mapuploader/ - person Kamran Amini; 07.06.2012
comment
Итак, мой вопрос: какого пользователя я должен сделать владельцем этой папки? Пользователь apache не существует, и я использовал команду top, чтобы увидеть владельцев процессов, а в процессах apache2 есть два владельца: root и www-data. Я пробовал как с www-данными, так и с ними, они всегда общедоступны (например, сделать всех владельцами), а с корневым php не могу их прочитать. - person Karevan; 07.06.2012
comment
Прочитайте файл httpd.conf. В нем указан пользователь. - person Kamran Amini; 07.06.2012
comment
Файл httpd.conf пуст. В той же папке httpd.conf я нашел имена файлов envars, где я нашел следующее: - person Karevan; 07.06.2012
comment
Почему бы вам не скопировать в папку, которая не находится в вашем каталоге www? Когда каталог не находится в каталоге www, поэтому веб-служба не будет обслуживать клиентов, если есть какой-либо запрос на доступ к этому каталогу. Вы можете использовать, например, /usr/test/upload - person Kamran Amini; 07.06.2012