Почему файлы приложения CodeIgniter находятся в папке public_html? - PullRequest
6 голосов
/ 01 декабря 2009

Разве не все файлы в открытом доступе - это плохо?

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

Ответы [ 6 ]

26 голосов
/ 01 декабря 2009

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

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

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

  • корень
    • code_igniter
      • application_folder
        • конфигурация
        • Контроллеры
        • модель
        • ...
      • system_folder
    • public_html
      • CSS
      • JS
      • изображения index.php .htaccess

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

$system_folder = "../../code_igniter/system-folder";
6 голосов
/ 01 декабря 2009

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

# Protect application and system files from being viewed
RewriteRule ^(application|system) - [F,L]
2 голосов
/ 10 мая 2012

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

/application
/system
/public
   index.php 

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

$application_folder = '../application';
$system_path = '../system';
1 голос
/ 13 марта 2013

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

<?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;
?>
0 голосов
/ 01 декабря 2009

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

0 голосов
/ 01 декабря 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...