Как предотвратить прямой доступ к моему PHP-код?


у меня есть приложение PHP, и я не хочу, что пользователь может ввести в адресную строку имя конкретного файла, например, { exemplo.com/enviar.php }, все мои файлы называются по index.php, как я могу предотвратить прямой доступ к все они, за исключением индекса?

Детали: Я использую сервер Apache работает на Debian 8.

 14
php
Author: Ana P. Messina, 2015-11-18

4 answers

Я использую в htaccess в моем блоге в wordpress следующее правило

<Files *.php>
    Order Deny,Allow
    Deny from all
</Files>

<Files index.php>
    Order Allow,Deny
    Allow from all
</Files>

Первая часть запрещает доступ ко всем файлам .php и второй выпускает только доступ к index.php

Таким образом, в моем случае wordpress, если человек пытается получить доступ к файлу, как wp-config.php, который находится в корневой папке появляется предупреждение "страница не найдена", а не страницы.

Может быть использован на сайты, которые не являются wordpress также

 9
Author: Alan Rezende, 2015-11-19 00:11:33

Вы могли бы сделать это, создав папку, где остались все ваши файлы защищены и внутри этой папки вы можете создать файл .htaccess поставив эту инструкцию ниже внутри него, что делает доступ к папке запрещен в запрос http и возвращает ошибку 403 для пользователя, который пытается получить доступ к любому файлу в папке:

Deny from all

И в корне вашего приложения, где находится файл index.php, вы могли бы поставить другой .htaccess с следующие строки ниже, если вы хотите работать с дружественных url:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

, Где внутри файла index.php вам придется обработать аргумент $1 в запросе.

Структура папок может выглядит так:

inserir a descrição da imagem aqui

 5
Author: Yure Pereira, 2015-11-19 00:47:43

Безопасный метод это за отдачи каталога.

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

Такая возможность зависит от того, веб-сервер используется.

Я Считаю, отступ каталоге более безопасным, потому что защищает как на стороне клиента и на стороне сервера.

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

Как сделать отступ в каталоге?

В общей папке будет только файл index.php.

В Этом файле index.php, вы делаете include в файл в папке.

Пример структуры.

/var/www/website.foo/public
/var/www/website.foo/app
/var/www/website.foo/logs

Выше, например, в корневой каталог-это /var/www/website.foo/public

Файл index.php будет внутри этого каталога /var/www/website.foo/public/index.php

Всех других файлов .php система, поместите из папки public.

/var/www/website.foo/app/foo.php
/var/www/website.foo/app/bar.php

, Как этот каталог не является публично доступной, безопасной. Однако, третий человек, имеющий доступ к серверу по FTP или SSH, все еще может иметь доступ к файлам.

", Если хотите усилить меры безопасности, не дайте доступ по SSH или FTP в этот каталог, чтобы люди не авторизованный.

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

Все равно рискуете клиента запустить php-скрипты внутри папок.

В этих случаях также можно запретить выполнение PHP скриптов в папке. Проблема в том, что index.php не будет работать больше.

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

Таким образом, мы имеем все файлы, включая индекс.php, защищены как посетителя как пользователя FTP.

В Linux, можно сделать символическую ссылку следующим образом:

ln -s "/var/www/website.foo/app/index.php"  "/var/www/website.foo/public/index.php"

В среде Windows:

mklink /j "c:\www\website.foo\app\index.php"  "c:\www\website.foo\public\index.php"

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

 4
Author: Daniel Omine, 2015-11-19 00:52:59

", разработали свой проект так, процедурное, не используя никаких framework (только miniframework ты подлинности сеанса, который работает только для arquios в корне: в / в) или стандартная структура (шаблон проектирования), я просто переживает эту дилемму в последнее время, и лучшей решение, которое я нашел, было положить все, что не будет осуществляться http (в основном файлы, включенные include, require) в папке, и .htaccess ее:

deny from all

И в другой папке поставил то, что должно осуществляться http (*JS *CSS, а некоторые - html's), и в корне положить в основные файлы, где они связываются через систему. И я думаю, что без design pattern определяется и framework, не имеет гораздо больше предстоит сделать.

Я знаю, что это не отвечает на вопрос, хотел только передать мой недавний опыт, прежде чем перевести (свободно с помощью Google) это отличный ответ SOen:

Вы уверены, что хотите это сделать? Даже с css-файлы, js и изображений...?

ОК, сначала проверьте, если mod_access установлен Apache, и в затем добавьте следующее к вашему .htaccess:

Order Deny,Allow
Deny from all
Allow from 127.0.0.1

<Files /index.php>
    Order Allow,Deny
    Allow from all
</Files>

Первая директива запрещает доступ к любым файлам, за исключением от localhost, и из-за Order Deny, Allow Allow, второй директивы только освобождает доступ к от index.php.

Предупреждение: Не есть пробел после запятой в строке заказа.

[EDIT:]

, Чтобы разрешить доступ к файлам .css или * .js использовать эту директиву:

<FilesMatch ".*\.(css|js)$">
    Order Allow,Deny
    Allow from all
</FilesMatch>

Вы не можете использовать директивы <Location> <Directory> в файле - .htaccess.

Вариантом было бы использовать <FilesMatch ".*\.php$"> вокруг группа премьер allow,deny group, а затем явно разрешить доступ к index.php.

 4
Author: gustavox, 2017-05-23 12:37:30