Вот в этом вопросе меня заинтересовал приведенный в одном из ответов код.
/* безопасное соединение с базой данных, файл лежит перед корнем сайта если вдруг упадет php, логин и пароль к базе данных никто не сможешь увидеть */
include_once('../db-site.php');
Как я понимаю, автор боится того, что сервер Apache+PHP вместо выполнения PHP-сценари
выдаст исходный код чистым текстом. Но ведь это должно быть невозможно в принципе (как я понимаю), ведь даже если PHP упал, то Apache при запросе в адресе *.php попытается запустить php, который лежит, а значит пользователь получит в ответ ошибку, или ничего.
Вопрос: при каких условиях возможна выдача сервером исходного кода?
Ответы
Ответ 1
Есть PHP ляжет, то сервер отдаст PHP-листинг (исходный код).
Ответ 2
к чему столько паники, пишем адекватный .htaccess перенаправляющий все запросы н
index.php , в index.php только инклюды необходимых файлов (ядра, контроллера и т.д.) и всё даже если пхп упадет пользователь получит листинг только файла index.php а извращаться и хранить файл подключения к бд под корнем сайта это, извините, параноя.
Ответ 3
Не извращайтесь так) В index.php пишем инклуд, весь остальной код ограничиваем какой-то папкой. У меня получилось такое:
#.htaccess
ErrorDocument 404 /404.html
RewriteEngine On
RewriteRule ^system/.*/$ /404.html [L] #папки
RewriteRule ^system/.*\.php$ /404.html [L] #.php
Ну а если ляжет поддержка .htaccess - скорее всего это будет означать, что лег апач.
Ответ 4
У меня сделано как. Я сторонник меньшего числа вхождений в программу. Т.е:
Есть index.html и api.php - они лежат в /var/www/web/ <--- Web Root path, и ест
куча файлов за ней. (/var/www/core/*.php).
В Api.php есть строка, которая подключает стартап файл с модулями (при require, в отличии от простого "include" разница во времени незаметна).
Например.
api.php -- require -> ../core/start.php
start.php -- require -> ./*.php
Api.php содержит Класс, который в зависимости от запроса будет задействовать то
или иной класс и отдавать нужную информацию.
Тем самым я себя защитил от:
Если ляжет php, никто все равно не получит исходники. Все равно в api.php нет ничего такого, что помогло бы злоумышленнику ломануть ту..или иную штуку.
Чем меньше число вхождений в программу, тем проще контролировать корректность запросов => Если будет замечена дыра - ее будет оч. просто ее прикрыть :)
Собственно, все :)
Ответ 5
Чтобы исходники не стащили, достаточно закодировать скрипты хоть тем же Zend Guard.
Ну а если у Вас свой сервер, пусть и виртуальный, но с отключенной возможностью удаленного подключения к БД, то "украденные" пароли ничем не помогут.
Ну а если у Вас нет денег ни на приличный хостинг, ни на Zend Guard, то кому нужно Вас "ломать"?
Ответ 6
Падение пыха не обязательно. Достаточно в htaccess, а лучше в php.ini прописать такое:
AddType application/x-httpd-php-source .php
И сервер будет выдавать вместо результатов вычислений красивый подсвеченный исходник.
Ответ 7
Лучше писать код так, чтобы его можно было выложить хоть на GitHub и ничего секретного не ушло.
А доступы к базе данных, ключи к API хранить в переменных окружения (http://12factor.net/ru/config) или вообще в стороннем сервисе (https://www.vaultproject.io/docs/secrets/consul/)
Комментариев нет:
Отправить комментарий