【问题标题】:folder to save files that are retrieved with require in document tree用于保存在文档树中使用 require 检索的文件的文件夹
【发布时间】:2011-12-10 22:55:15
【问题描述】:

我正在构建一个基于 php 的网站,我想询问将使用 require 语句检索到的文件放在哪里,以便用户无法使用浏览器访问它们。 (例如连接到我的数据库的 php 文件)

EDIT 实际上我认为更好的方法是将它们放在公共根目录之外,因为 apache 教程说 htaccess 会产生减速影响。可以通过添加 ../ 例如 require("../myFile.php"); (至少这在我的服务器上有效) 向所有人致以最诚挚的问候

【问题讨论】:

  • 您可以回答自己的问题并接受它,以便其他人更快地找到解决方案!

标签: php path require


【解决方案1】:

这取决于网络服务器配置。通常(或至少在我目睹的所有情况下),您有一个文档根目录,用户无法通过浏览器访问该根目录,其中有一个包含所有公共材料的文件夹(通常称为 htdocshttpdocs、public_html 或任何类似的东西。通常,您可以将 PHP 包含文件放在该根目录中,然后使用 require("../include_file.php"); 要求它们 但是,PHP 是否可以包含公共文件夹之外的文件取决于配置。如果没有,.htaccess 文件是您的最佳选择。

【讨论】:

  • 所以要使用 htaccess 我将我的文件命名为 include_file.htaccess?
  • @user1003256:如果你真的明白你在做什么,你应该只使用.htaccess,因为这是网络服务器配置,如果你犯了错误,你会降低安全性。这并不意味着我要阻碍你学习网络服务器配置:httpd.apache.org/docs/current/howto/htaccess.html
【解决方案2】:

如果您将这些文件放在网络服务器的文档根目录之外,用户将无法使用浏览器访问这些文件。

如果您使用 apache,您还可以将这些文件放在不允许使用 .htaccess 文件访问的目录中。

最后一点,如果您的文件不生成输出,则用户无法检查文件的内容。

【讨论】:

    【解决方案3】:

    如果你的意思是源代码,那么它对用户不可见,如果你想隐藏文件夹内容使用 .htaccess 指令选项 -Indexes 隐藏文件,如果你可以访问 php 源你的服务器配置是错误的,它没有解析 php文件。

    【讨论】:

      【解决方案4】:

      您通常将它们放置在无法通过网络服务器访问的目录中(在文档或网络根目录之外)。有时称为“私有”目录。

      然后,您可以包含/要求该路径中的文件,因为 PHP 仍然可以访问这些文件。

      另见:

      【讨论】:

        【解决方案5】:

        只需使用 .htacces 确保它们的安全!

        Here's 一个非常清晰的使用密码保护文件的教程。如果您不需要直接访问每个浏览器的文件,或者只有您的脚本需要访问,只需通过更改代码来完全阻止它们

        <Files xy>
        change this bit here
        </Files>
        

          Order allow,deny
          Deny from all
        

        那么你也不再需要你的 htpassword 文件了!

        【讨论】:

        • .htaccess 对于不知道或不处理这些文件的服务器来说不是一个安全的建议。
        【解决方案6】:

        您需要将这些文件放在网络服务器上面向公众的文件夹之外。大多数(全部?)网络主机都应该能够更改网站的文档根目录。

        例如,假设您的所有文件都来自主机上的以下目录:/home/username/www/example.com/

        这意味着该目录中的任何内容都对 Internet 可见。如果您转到http://example.com/myfile.png,它将在/home/username/www/example.com/myfile.png 提供文件。

        您要做的是创建一个名为public 的新目录,它将为您的文件提供服务,并将文档根目录指向那里。完成后,http://example.com/myfile.png 的请求将从/home/username/www/example.com/public/myfile.png 提供(请注意此处的public 目录)。现在,位于example.com 目录中的任何其他内容都不会在您的网站上可见。您可以创建一个名为 private 的新目录,其中将存储您的敏感包含文件。

        假设您有两个文件:index.php,为您的网站提供服务,sensitive.php,其中包含密码和类似的东西。你可以这样设置:

        /home/username/www/example.com/public/index.php
        /home/username/www/example.com/private/sensitive.php
        

        index.php 文件对 Internet 可见,但 sensitive.php 不可见。要包含sensitive.php,您只需包含完整的文件路径:

        require_once("/home/username/www/example/com/private/sensitive.php");
        

        您还可以将您的应用程序根(您的网站文件的根,但不是可公开访问的文件的根)设置为 define,可能在某个配置文件中,并使用它,例如:

        require_once(APP_ROOT . "sensitive.php");
        

        如果您不能更改文档根目录,那么某些框架所做的就是使用define 来注意不应该直接执行该文件。您可以在任何想要作为应用程序入口点的文件中创建一个定义,通常只是 index.php,如下所示:

        if (!defined('SENSITIVE')) {
           define('SENSITIVE', 'SENSITIVE');
        }
        

        然后,在任何敏感文件中,检查它是否已设置,如果没有设置则退出,因为这意味着文件正在直接执行,而不是由您的应用程序执行:

        if (!defined('SENSITIVE')) {
           die("This file cannot be accessed directly.");
        }
        

        此外,请确保您的包含文件在可公开访问时(实际上,即使不是)具有适当的扩展名,例如 .php,以便 Web 服务器知道将它们作为 PHP 文件执行,而不是将它们作为纯文本提供。有些人使用.inc 来表示包含文件,但如果服务器无法识别它们是由 PHP 处理的,那么任何愿意查看的人都可以公开查看您的代码。这不好!为防止这种情况,请始终使用 .php 扩展名命名您的文件。如果您想使用.inc 样式来显示您的包含文件,请考虑改用.inc.php

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-12-26
          • 2012-10-16
          • 1970-01-01
          • 2012-06-18
          • 2021-10-19
          • 1970-01-01
          • 2013-05-17
          相关资源
          最近更新 更多