Как запретить доступ к папке с 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-коду напрямую через веб-сервер, так как код всегда будет выполняться и только возвращаемые данные будут доступны для извлечения.

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

Другие вопросы по тегам