2012-03-22 2 views
6

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

Я попытался с помощью .htaccess с

<Files *> 
    Order Allow,Deny 
    Deny from All 
</Files> 

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

P.S. Моя основная проблема заключается в том, что некоторые из файлов не включены в основные файлы PHP, но они связаны там, и их код заканчивается header('Location: ../index.php');, возвращающимся на главную страницу проекта.

ответ

1

Обычно для защиты этих логические файлов из публичного доступа можно

  1. положить его в защищенном каталоге, выше HTDOCS
  2. добавить проверку для общественной константы .. if(!is_defined(some_root_const)){die();}
  3. расширения изменения в .INC или что-то .. и отрицать с .htaccess на основе этого
3

Существует еще более безопасный метод. Храните ваши включенные файлы под доступными в Интернете папками. Так что, если ваши веб-файлы здесь ...

/var/www/mysite.com/

магазин включаемых файлов здесь:

/вар/включает/

Затем включите их полный путь ...

include '/var/includes/myincludes.inc.php'; 

Из Интернета файл myincludes.inc.php полностью недоступен.

1

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

http://php.net/manual/en/function.set-include-path.php

3

ли это:

<Files *> 
    Order Deny,Allow 
    Allow from 192.168.100.123 127.0.0.1 
    Deny from all 
</Files> 

Список IP-адресов, будут конкретные хосты Вы позволяете, как локальный.

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

+0

Я попробовал его с ' \t Order Allow, Deny \t Разрешить от 127.0.0.1 \t Запретить Все ' но он блокирует все файлы, вызываемые из функций AJAX. –

+0

Конечно, потому что они запрашиваются клиентом. Вы не можете «разрешить клиенту» и «не разрешать клиенту» обслуживать файлы. – Ray

0

В вас .htaccess вам нужно будет указать, какие IP-адреса, хосты вы хотите разрешить, и вы можете сделать это и для каждого каталога. например.

<Directory /dir/to/block> 
    Order Allow,Deny 
    Allow from 192.168.0.1 4.4.4.4 
    Deny from All 
</Directory> 
<Directory /dir/to/allow> 
    Order Allow, Deny 
    Allow from All 
</Directory> 
6

Я вижу много ответов с Allow, Deny не Запретить, Разрешить

Порядок этого вопросов и вызывает проблему. Вы говорите компьютеру, что отрицание важнее, чем разрешить, потому что оно указано последним. Для того, чтобы показать вам ... если вы скажете:

<Files .htaccess> 
Order Allow,Deny 
Deny From All 
Allow From xxx.xxx.xxx.xxx 127.0.0.1 
</Files> 

Вы говорите первым Разрешить все разрешено, то Запретить все ... Какие еще все отрицает.

Если вы отменили команду «Отказать», разрешите вам говорить «Запретить все», а затем разрешить кому угодно.

<Files .htaccess> 
Order Deny,Allow 
Deny From All 
Allow From xxx.xxx.xxx.xxx 127.0.0.1 
</Files> 

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

xxx.xxx.xxx.xxx = Ваш IP

Смежные вопросы