【问题标题】:Why are CodeIgniter application files in the public_html folder?为什么 CodeIgniter 应用程序文件位于 public_html 文件夹中?
【发布时间】:2010-12-21 19:15:39
【问题描述】:

将所有文件都公开显示不是一件坏事吗?

当然,诸如 /system/application/config/database.php 之类的东西不应该公开可见!

【问题讨论】:

  • 是的,我已经看过 CI。我想知道为什么这个不安全的配置是默认配置。似乎它纯粹是为了方便直接开箱即用。 #2 PHP 并不总是被解析,可能是因为管理员错误(见下面 Frank Farmer 的评论)#3 见 #2

标签: php security apache codeigniter


【解决方案1】:

CodeIgniter 的开发者 EllisLabs 以这种方式设置框架以方便使用。这意味着希望试用该框架的人不必摆弄他们服务器上的任何权限设置。

当然,在生产服务器上,您是绝对正确的,将您的 PHP 文件放在公共 HTML 文件夹中不是一个好主意。

组织文件夹的更好方法是:

    • code_igniter
      • 应用程序文件夹
        • 配置
        • 控制器
        • 型号
        • ...
      • system_folder
    • public_html
      • CSS
      • js
      • 图片 索引.php .htaccess

这里唯一要做的其他更改是将 index.php 的第 26 行更改为:

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

【讨论】:

  • 我还喜欢将应用程序文件夹拉出 CodeIgniter 文件夹。我很少接触 CodeIgniter 的源代码,这为我节省了一层嵌套。
  • 这也意味着您可以将代码点火器安装重用于另一个应用程序,而无需将其复制到自己的目录中
  • 使用此设置,您还需要更改 index.php 中的 $application_folder 的默认值
【解决方案2】:

您可以将以下规则添加到您的 .htaccess 文件中,以进一步保护系统和应用程序目录不被查看(发送 403 Forbidden 错误):

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

【讨论】:

  • [F,L] 在这里实际上做了什么?
  • F 添加一个标头(403 禁止),L 只是阻止处理任何进一步的规则。
【解决方案3】:

采用这种结构:

/application
/system
/public
   index.php 

你可以在public/index.php中更改这两个设置就大功告成了

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

【讨论】:

    【解决方案4】:

    乔恩·温斯坦利的回答很完美, 也不要忘记保护文件上传文件夹,如果你有的话。我还通过将其移到公共根目录之外来做到这一点,并使用以下代码获取图像:

    <?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;
    ?>
    

    【讨论】:

    • 当然在此之前我们通过遍历每个元素来清理 $_GET 数组
    【解决方案5】:

    从浏览器访问 /system/ 中的文件不会泄露任何敏感信息,因为 PHP 将被解析并且这些文件没有任何输出(CI 系统文件甚至可以检查是否已定义一个变量来指示该文件未被直接访问)。

    话虽如此,您还是应该将整个系统文件夹安装在 Web 根目录之上。

    【讨论】:

    • 不幸的是,有时,PHP 无法解析——通常是由于管理员错误。这就是 Facebook 的所有资源在不久前被泄露的原因。这就是为什么你应该从一开始就让所有东西都远离世界可访问的路径。这就是把贵重物品锁在手套箱里和一开始就不把它们留在车里的区别。
    【解决方案6】:

    您始终可以将系统目录放在公共目录之外。不要忘记更新前端控制器(index.php)中的路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      相关资源
      最近更新 更多