Защита файлов PHP на веб-сервере

Я медленно изучаю PHP, MySQL, а также некоторые HTML, используя localhost как мой веб-сервер. Тем не менее, я начинаю задаваться вопросом, как мои .php-файлы будут защищены, если я положу это в Интернете.

У меня есть веб-страница на localhost / app.php, которая включает в себя форму, некоторый PHP-код и некоторые MySQL-запросы. Информация о учетных данных MySQL находится в одном каталоге выше, где находится app.php, но как я могу запретить незнакомцам получать доступ к содержимому app.php, включая структуру данных MySQL, команды, которые я использую, и т. Д. Когда вы просматриваете исходный код в браузере вы видите только часть HTML, но не могли ли кто-то загрузить app.php и посмотреть в фактический файл, если он захочет?

Каков правильный способ построения файловой структуры? Ссылки или комментарии очень ценятся! ТИА!

Ну, если вы используете расширение .php, Apache будет обслуживать анализируемую версию – эхо и печать будут выводиться, но ваши переменные не будут.

Если вас все еще беспокоит, есть несколько способов сделать ваши файлы более безопасными.

  • Алиасирование Apache является обычным явлением – оно позволяет вам иметь один каталог, похожий на другой. В этом случае вы должны перечислить свой каталог PHP в какой-либо каталог вашего домена. Если ваша файловая структура /home/user/my_files/ , вы можете использовать my_files как www.my-domain.com/files . Сценарий не будет доступен там для запросов, но он будет доступен для чего-то на сервере.
  • Символические ссылки или символические ссылки могут выполнять те же действия, что и выше.
  • просто поместите файлы конфигурации в другое место и напрямую обратитесь к ним. Как правило, это не очень хорошая идея, так как это жесткие коды, но это вариант.
  • метод CodeIgniter: в вашем index.php есть define( 'IN_APPLICATION', 1 ); в ваших конфигурационных файлах есть if( !defined( 'IN_APPLICATION' ) ) die( 'No direct script access allowed' );

Нет. Php анализируется, если страница запрашивается по HTTP. Человек должен будет знать уязвимость в вашем приложении, Apache или PHP или иметь другой доступ, такой как FTP.

Вы можете перемещать файлы из своего wwwroot и ссылаться на них в другом месте. Кроме того, никогда не называйте свои файлы include как .inc . всегда называйте их `.php.

Попробуйте загрузить файл .php на свой localhost. Вы обнаружите, что все, что у вас есть, – это HTML-код. Это из-за того, как работает сервер. Вот пример с файлом php

  1. Клиент (обычно веб-браузер) отправляет HTTP-запрос на сервер, то есть:

    GET /app.php HTTP / 1.1

  2. Сервер принимает запрос и обрабатывает его. В случае php-файла сервер должен обработать файл php в HTML.

  3. HTML возвращается клиенту.

Если вы используете Apache и хотите, чтобы файлы php обрабатывались, убедитесь, что эти правила находятся в вашем apache2.conf:

 LoadModule php5_module modules/libphp5.so AddHandler php5-script .php AddType text/html .php 

И, просто для удовольствия, если вы когда-либо хотели открыть свой php-источник, добавьте эту строку в apache2.conf:

 AddType application/x-httpd-php-source .phps 

Чтобы быть в безопасности, убедитесь, что ваши файлы конфигурации mySQL и все остальное, что вы не хотите публиковать, хранятся вне каталога, в котором вы обслуживаете. Документы apache – отличный ресурс для понимания того, как все это работает.

Хотя с этим не возникает прямой проблемы (многие приложения делают это, и поскольку источник не может быть замечен без взлома вашего сайта), многие приложения решают это с помощью «frontcontroller». Передний контроллер много используется в MVC-структурированных (Model, View Controller) приложениях.

Типичная структура выглядит так:

 приложение / (приложения, контроллеры и представления)
 lib / (библиотеки, общая логика)
 config / (ваши конфигурации)
 web / (ваш веб-ресурс, только для css, изображений, javascript и т. д.)
 web / index.php (ваш фронтконтроллер)

Только разоблачая index.php и размещая все php и конфиденциальные файлы вне вашего веб-сайта, они не будут доступны никому из Интернета.