【问题标题】:How to protect .env file in Laravel如何在 Laravel 中保护 .env 文件
【发布时间】:2022-02-22 01:22:56
【问题描述】:

我将我的项目移至 HOST,但我仍然可以使用地址 mysite.com/.env 访问 .env 并显示该文件以及所有变量和安全数据。 我的 .env 文件:

APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:xxxxxxx
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=xx
DB_USERNAME=xx
DB_PASSWORD=secret

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

如何保护此文件?这是合乎逻辑的解决方案吗?

注意:(我将所有文件移动到根目录的公共文件夹中。)

【问题讨论】:

  • Apache 默认拒绝访问以. 开头的文件。你用的是什么网络服务器?
  • 我的网络服务器是 Apache。
  • .env 应该在 /path/to/your/laravel-project 中。并且 /path/to/your/laravel-project/public 应该是 webroot。因此,除非您更改了默认设置,否则您应该无法访问 .env
  • stackoverflow.com/a/47355544/6517383 这个答案使用文件权限

标签: php laravel-5


【解决方案1】:

在您的根目录中创建 .htaccess 文件并放入以下代码。

#Disable index view
options -Indexes

#hide a Specifuc File

<Files .env>
order allow,deny
Deny from all
</Files>

【讨论】:

  • 这是最快最好的方法
  • 我发现不仅 .env 文件,而且 laravel 的所有文件都处于相同的情况。保护所有 laravel 文件(公用文件夹除外)的最佳方法是什么。我们需要为所有文件设置600权限吗?
  • @Nguyen Duc Linh Solution via Permission
【解决方案2】:

我已尝试按照以下步骤在共享主机中部署 laravel。

1 - 在 Ubuntu 操作系统中编辑 /etc/apache2/apache2.conf。请检查其他操作系统中的相应文件。

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All # Changed from None to All
        Require all granted
</Directory>
  1. 启用模组重写sudo a2enmod rewrite

  2. 在根目录(公共 html 文件夹)中编辑或创建 .htaccess

     <Files ~ "\.(env|json|config.js|md|xml|gitignore|gitattributes|lock|editorconfig|yml|styleci.yml)$">
         Order allow,deny
         Deny from all
     </Files>
     Options -Indexes
     <Files ~ "(artisan|package.json|webpack.mix.js)$">
         Order allow,deny
         Deny from all
     </Files>
    

4 - 重启 Apache 服务器,sudo service apache2 restart

注意:- 前两个步骤仅在我自己的 PC 中使用。

【讨论】:

    【解决方案3】:

    您可能正在寻找如何阻止 .env 文件在 apache 上提供服务,因此请阅读。

    在 /etc/apache2/apache.conf 文件上执行此操作 - Ubuntu。在该文件的这一部分之后
    &lt;FilesMatch "^\.ht"&gt;
    Require all denied
    &lt;/FilesMatch&gt;

    在下面添加代码

    # Hide a specific file
    <Files .env>
        Order allow,deny
        Deny from all
    </Files>
    

    然后使用 sudo service apache2 restart 重新启动您的 apache 服务器并享受吧!

    【讨论】:

      【解决方案4】:
      1. Public 文件夹以外的所有文件夹都移动到更高级别,例如文件夹 laravel - http://prntscr.com/bryvu7

      2. 更改文件 publi_html/index.php 线

        require __DIR__.'/../bootstrap/autoload.php';

      到

      require __DIR__.'/../laravel/bootstrap/autoload.php';
      

      和线

      $app = require_once __DIR__.'/../bootstrap/app.php';
      

      到

      $app = require_once __DIR__.'/../laravel/bootstrap/app.php';
      $app->bind('path.public', function() {
          return __DIR__;
      });
      
      1. 更改文件 laravel/server.php 线

        require_once __DIR__.'/public/index.php';

      到

      require_once __DIR__.'/index.php';
      

      【讨论】:

      • 谢谢。但是做完这些事情后,当去mysite.com显示laravel文件夹和public文件夹时不显示索引网站。
      • 也许在托管您的文件夹 - 公开。不是文件夹 public_html?
      【解决方案5】:

      您应该将应用程序上的所有文件夹的权限更改为 741,但引导和存储以及公共 (755) 除外。

      【讨论】:

        【解决方案6】:

        就我而言,我什么时候在共享托管中托管我的项目时,我的 .env 文件是可访问的,我的文件夹结构是这样的 根 |+ 应用 |应用程序 |配置 |数据库 |路线 |贮存 | .env | ... |索引.php | .htaccess |+ CSS |+ js

        我的 .env 文件可以通过这个 website.com/app/.env 访问 解决方案 将所有公共内容放到一个公开的文件夹中,并在设置中更改根文档路径[不要忘记更改 index.php 文件中的 app.php 路径] |+应用 |+公开

        bootrap.php 文件路径应该是这样的 /../app/vendor/autload.php & /../app/bootstrap/app.php

        【讨论】:

          【解决方案7】:

          从公用文件夹中移动.htaccess,然后将此代码粘贴到.htaccess 文件中。

          &lt;Files .env&gt; Order allow,deny Deny from all &lt;/Files&gt;

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-11-28
            • 2019-04-13
            • 1970-01-01
            • 2021-11-16
            • 1970-01-01
            • 2015-07-07
            • 2019-12-13
            相关资源
            最近更新 更多