Откажете директен достъп до всички файлове в папка с помощта на apache/php

Това може да изглежда като дублиран въпрос, но аз опитах решението, дадено в подобни въпроси.

Искам да огранича достъпа до файлове в няколко папки на моя сървър apache, така че да могат да се обслужват само чрез php скрипт само на потребителите, влезли в частта от моята система, която трябва да има достъп до всяка конкретна папка.

Други решения предлагат използването на .htaccess

deny from all
allow from 127.0.0.1

Но това изглежда отказва файловете отвсякъде. Включително локалните php скриптове.

Обмислям .htpasswd, но това е допълнително ниво на потребителски идентификационни данни, които трябва да бъдат обработени и бих предпочел да избегна това.

Как да заобиколя това? Има ли по-добър начин за съхраняване на файлове?


person Einar Sundgren    schedule 30.05.2013    source източник
comment
горното решение трябва да работи. освен ако вашите локални скриптове не правят нещо "странно" (достъп до локални файлове през http например)   -  person    schedule 31.05.2013
comment
Знам, че и аз очаквах това. Но когато извикам ‹?php include('file.php')?› очевидно не го чете. И не мисля, че включването може да се счита за много странно нещо.   -  person Einar Sundgren    schedule 31.05.2013
comment
Опцията .htaccess е това, което искате. Той ще откаже цялата директория, включително скрипта, чрез който искате да ги обслужвате, ако е там. Решението за това е да преместите скрипта някъде другаде   -  person Will Warren    schedule 31.05.2013
comment
Не можете ли просто да преместите файловете от уеб корена? Това изглежда като очевидното решение за файлове, които могат да се обслужват само чрез php скриптове.   -  person jeroen    schedule 31.05.2013
comment
нещо друго трябва да се случва тук.   -  person    schedule 31.05.2013
comment
Бих ги преместил от корена на мрежата, ако ми беше позволено. Но хотелът, в който съм, не ми дава тази възможност.   -  person Einar Sundgren    schedule 31.05.2013


Отговори (2)


htaccess не може да откаже достъп до файлове чрез php, използвайки функции за включване/изискване. Ако вашето php включване няма достъп до файла, тогава проблемът е пътят до файла.

person Danny    schedule 30.05.2013
comment
Все още включването работи, когато премахна отказа от .htaccess. Не мога да обясня причините и бих искал да знам дали има някаква грешка, която може да ми покаже какво се случва. - person Einar Sundgren; 31.05.2013

По някакъв начин php беше ограничен от

deny from all
allow from 127.0.0.1

за включване и изискване на файлове в засегнатите папки. Това противоречи на това, което мога да прочета от документацията на Apache как това трябва да работи и нямам истински отговор защо. Проблемът продължаваше както на моя локален хост, използващ Xampp, така и на webhotel one.com.

Първоначалният ми въпрос беше лошо оформен, тъй като използвах изискване, за да тествам дали имах достъп за четене до папката, когато всъщност исках да използвам readfile.

Основното ми притеснение беше, че исках да обслужвам файлове за изтегляне от недостъпна директория. И на

readfile($filename);

все още има достъп до файловете.

Решението на този проблем беше, че разбрах, че readfile() и include() по някакъв начин получават различни разрешения. Не можах да намеря това в никаква документация.

person Einar Sundgren    schedule 11.06.2013