【问题标题】:How to hide config files from direct access?如何隐藏配置文件以防止直接访问?
【发布时间】:2016-09-27 04:39:34
【问题描述】:

我正在将 Laravel 用于网络应用程序。上传了生产上的所有东西,发现有些文件可以通过url直接访问-例如http://example.com/composer.json

如何避免直接访问?

【问题讨论】:

    标签: php laravel .htaccess


    【解决方案1】:

    将您的网络服务器指向一个公共目录并重新启动它。

    对于 Apache,您可以使用以下指令:

    DocumentRoot "/path_to_laravel_project/public"
    <Directory "/path_to_laravel_project/public">
    

    您也可以拒绝 .htaccess 中的文件。

    <Files "composer.json">
    Order Allow,Deny
    Deny from all
    </Files>
    

    对于多个文件,您可以在 .htaccess 文件中多次添加上述文件标签。

    【讨论】:

      【解决方案2】:

      只需创建空白

      index.php

      配置目录下的文件,并根据需要在文件中写入消息通知访问者用户

      例如。服务器禁止访问

      【讨论】:

      • 这不会拒绝对 composer.json 的访问。它只是隐藏目录列表。要禁用目录列表,请将Options -Indexes 添加到 .htaccess 文件中。
      【解决方案3】:

      将 Web 服务器指向项目根文件夹中的公共目录

      project root folder/public
      

      但如果您没有公用文件夹并且您已经指向根文件夹,您可以通过在.htaccess 文件中写入以下代码来拒绝访问。

      <Files ".env">
      Order Allow,Deny
      Deny from all
      Allow from 127.0.0.1
      </Files>
      

      在上面的代码中,首先我们拒绝所有,只允许从自己的服务器(本地主机到服务器)执行,因此我们可以保护它不受外部用户的影响。

      【讨论】:

        【解决方案4】:

        使用 Apache,你可以在 Laravel 项目的根目录下创建 .htaccess 文件,将所有请求重写到 public/ 目录。

        <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule ^(.*)$ public/$1 [L]
        </IfModule>
        

        【讨论】:

          【解决方案5】:

          您也可以拒绝 .htaccess 中的文件。

          <Files "composer.json">
          Order Allow,Deny
          Deny from all
          </Files>
          

          【讨论】:

            【解决方案6】:

            您使用了错误的网络服务器配置。将您的 Web 服务器指向 public 目录并重新启动它。

            对于 Apache,您可以使用以下指令:

            DocumentRoot "/path_to_laravel_project/public"
            <Directory "/path_to_laravel_project/public">
            

            对于nginx,你应该改变这一行:

            root /path_to_laravel_project/public;
            

            这样做之后,所有的 Laravel 文件将无法再从浏览器访问。

            【讨论】:

            • 但是共享主机呢?我们在那里怎么做? @alexey-mezenin
            • 我应该制作虚拟主机还是可以将DocumentRoot "/path_to_laravel_project/public" 放入.htaccess 中?
            【解决方案7】:

            这取决于您运行的网络服务器。对于 Apache,它将是 .htaccess 文件,而对于 Nginx,它将在服务器配置文件中处理。

            【讨论】:

              【解决方案8】:

              这是不正确的。 composer.json 位于 public 目录之外,因此不应访问。这意味着您的 VirtualHost 配置不正确。

              请确保您的目录路径以/public 结尾。

              【讨论】:

              • 我认为这是因为我已将 server.php 重命名为 index.php 并将 .htaccess 文件添加到根目录。那么以这种方式从 URL 中删除 public.index.php 是错误的吗?
              • 你不应该做任何改变。 index.php.htaccess 应仅位于 public 目录中,不应修改。
              【解决方案9】:

              将您的文档根目录设置为public 目录,这样其他文件将无法直接访问。在你的 apache/nginx/ 中寻找它?配置文件。

              【讨论】:

              • 我正在使用 Apache。好的,但我不希望这个公用文件夹出现在我的 URL 中。如果我将我的文档根目录设置为公共,我必须使用 /public 到我的 url's..
              • @YasenIvanov 我完全不明白你的抱怨是什么。现在你肯定必须在 URL 的开头使用/public/ 吗?如果您将文档根目录设置为公共目录,那么您不会。为什么要在所有 URL 的开头添加 /public/
              • 我不想在我的 URL 中添加 /public/ - 这就是我所说的。如果我将文档根目录设置为公共目录,它就不允许我获得这样的访问权限 - domain.com - 它显示“禁止”。如果我输入 domain.com/public 我可以访问。问题是如何从我的 URL 中删除这个 /public/ ?
              • @YasenIvanov 我想,你理解我和克里斯是错的。当您将文档根目录设置为public 路径时,它将是您的Web 服务器的根目录,因此URL 中不再有/public/
              猜你喜欢
              • 1970-01-01
              • 2012-05-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-08-01
              • 1970-01-01
              • 2016-03-04
              相关资源
              最近更新 更多