Почему файлы приложения CodeIgniter в папке public_html?

Не все ли файлы в общественном мнении плохо?

Несомненно, такие вещи, как /system/application/config/database.php, не должны быть общедоступными!

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

Конечно, на производственном сервере вы абсолютно правы, поэтому ваши PHP-файлы в общедоступной папке HTML не являются хорошей идеей.

Лучший способ организовать ваши папки:

  • корень
    • code_igniter
      • application_folder
        • конфиг
        • контроллеры
        • модели
      • system_folder
    • public_html
      • CSS
      • JS
      • images index.php .htaccess

Единственное другое изменение, которое нужно сделать здесь, это изменить строку 26 index.php следующим образом:

$system_folder = "../../code_igniter/system-folder"; 

Вы можете добавить следующее правило в ваш .htaccess файл для дальнейшей защиты от просмотра системных и прикладных каталогов (отправляет 403 Forbidden ошибку):

 # Protect application and system files from being viewed RewriteRule ^(application|system) - [F,L] 

С этой структурой:

 /application /system /public index.php 

Вы можете изменить в public/index.php эти два параметра, и все готово

 $application_folder = '../application'; $system_path = '../system'; 

Ответ Джона Уинстенли прекрасен, также не забудьте защитить папку для загрузки файлов, если она у вас есть. Я сделал это, также перемещая его за пределы общедоступного корня и получая изображения с использованием кода ниже:

 <?php // $details = getimagesize($_GET["path"] . '/' . $_GET["image"]); $details = getimagesize($_GET["path"] . strip_tags($_GET["image"])); header ('Content-Type: ' . $details['mime']); readfile($_GET["path"] . strip_tags($_GET["image"])); exit; ?> 

Доступ к файлам внутри / system / из браузера не будет раскрывать какую-либо конфиденциальную информацию, потому что PHP будет разбираться и ничего не выводится из этих файлов (системные файлы CI могут даже проверять, была ли определена переменная, которая указывает, что файл wasn Прямой доступ к нему.

Тем не менее, вы должны, вероятно, установить всю свою системную папку над веб-корнем в любом случае.

Вы всегда можете разместить системный каталог вне общедоступного каталога. Не забудьте обновить пути внутри фронтального контроллера (index.php).