Как запретить доступ к папке с php файлами с конфиденциальной информацией?
Я действительно новичок в PHP, но недавно мне пришлось поторопиться с работой в PHP, и я сделал кое-что, имеющее следующую структуру:
public_html
|
|- html
|- css
|- js
|- root
Корень - это папка, которая содержит всю обработку PHP. В файлах JS я размещаю данные на странице PHP, которая затем делает свое дело. Все работает нормально, но я не знаю, как ограничить доступ пользователя к этой "корневой" папке и файлам PHP, поскольку она содержит информацию, которую я не хочу раскрывать.
Я тоже пробовал .htacess
но это дает 500 внутреннюю ошибку сервера.
2 ответа
Это то, что я сделал.
Переместите файлы PHP из общей папки, кроме одного файла шлюза.
scripts/
prepend.php
a.php
b.php
public_html/
gateway.php
html files
css files
js files
Я использую .htaccess, чтобы перенаправить все запросы на мои скрипты PHP на gateway.php
, Этот файл делает все остальное: чтобы получить a.php
браузер должен запросить URL /php/a
, /php/b
будет перенаправлен b.php
...
RewriteEngine On
RewriteBase /
RewriteRule ^php/(.*) gateway.php?file=$1.php [END,QSA,NC]
END
означает перестать искать другие правила перенаправления. NC
означает совпадение без учета регистра. QSA
означает прикрепить параметры запроса, если они есть, к месту назначения перенаправления.
В php.ini
Я поставил auto_prepend_file
указать на файл в папке скриптов. Этот файл запускается перед всеми сценариями PHP, поэтому я могу использовать его для настройки. В частности, он имеет список разрешенных сценариев PHP.
prepend.php
//the only scripts that will be allowed to run (besides gateway.php)
Const SAFE_SCRIPTS = '"/path/to/gateway.php","/path/to/a.php" ...';
Const SCRIPTS_PATH = __DIR__; //this file should be in the scripts directory
//block unnknown files. This will prevent a malicious file from running
$file = $_SERVER['SCRIPT_FILENAME'];//should be /path/to/gateway.php
if(strpos(SAFE_SCRIPTS,"\"$file\"")===false) {http_response_code(404);exit;}
gateway.php отвечает за то, чтобы запрошенный PHP-файл был в списке разрешенных и переадресовал запрос в нужный файл.
//get the file requested. Comes from the htaccess rule
$file = SCRIPTS_PATH.'/'.$_GET['file'];
//if file is not in the allowed list, abort
if(strpos(SAFE_SCRIPTS,"\"$file\"")===false) {http_response_code(404);exit;}
//load the file that will handle the request
require SCRIPTS_PATH.'/'.$file;
Моя установка немного сложнее, но вы поняли идею. Сохраняет мои сценарии вне общедоступной веб-папки.
Я не уверен, что именно вы пытаетесь скрыть, но люди не могут получить доступ к вашему PHP-коду напрямую через веб-сервер, так как код всегда будет выполняться и только возвращаемые данные будут доступны для извлечения.
Однако вы можете использовать включения из файлов вне вашего веб-корня и иметь код, который возвращает необходимые данные в вашем веб-корне.