【问题标题】:How to disable .env file read?如何禁用 .env 文件读取?
【发布时间】:2020-11-19 13:49:08
【问题描述】:

我是 laravel 的新手,我知道 .env 文件用于存储数据库和电子邮件凭据。但是当我打开http://servername/.env 时,.env 文件内容会显示在浏览器中。

是否有机会在不将文件名更改为不可猜测的名称的情况下保护我的数据库凭据?

如果我使用.htaccess 来阻止文件读取,这会对 laravel 框架产生负面影响吗?

【问题讨论】:

  • 我不确定您是如何设置服务器的,但您应该只公开 public 文件夹的内容(更多信息,check this answer)。如果你这样做,你的问题就解决了。
  • 我以前不做服务器设置,因为我是前 CI 开发人员,试图学习 laravel。我已经检查了您的答案并将尝试一下。谢谢。

标签: laravel laravel-5


【解决方案1】:

请在您的 .htaccess 文件中添加以下代码。它也适用于 localhost 和 Live 服务器。

# Disable Directory listing
Options -Indexes

# block files which needs to be hidden, specify .example extension of the file
<Files ~ "\.(env|json|config.js|md|gitignore|gitattributes|lock)$">
    Order allow,deny
    Deny from all
</Files>

【讨论】:

  • 太棒了!!!你救了我的命 :) 它就像魅力一样。我使用的是 laravel 5.7 版本。
  • 在 /etc/apache2/apache.conf 上为我在全球范围内工作...谢谢!
【解决方案2】:

您可能正在寻找如何阻止 .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 服务器并享受吧!

【讨论】:

  • 这是一种全局禁止访问 .env 文件的好方法。此代码适用于所有以点开头的文件。 &lt;FilesMatch "^\.|\/\."&gt; Require all denied &lt;/FilesMatch&gt;
【解决方案3】:

在生产域中应该指向 index.php 文件所在的 laravel 项目公共文件夹,一旦完成,任何人都无法访问 .env 文件。如果您正在上传项目以向客户端显示演示,请不要上传 .env 文件,您可以在 .htaccesss 文件中设置 evn 参数

.htaccess 文件

SetEnv APP_ENV local
SetEnv APP_DEBUG true
SetEnv APP_KEY app_keyasfassafas

SetEnv DB_HOST localhost
SetEnv DB_DATABASE db_name
SetEnv DB_USERNAME root

SetEnv CACHE_DRIVER file
SetEnv SESSION_DRIVER file
SetEnv QUEUE_DRIVER sync

重要的 apache env_module 应该启用

【讨论】:

  • 所以这个.htaccess 和.env 有相同的功能对吧?如果我的服务器设置启用了 env_module,我会尝试你的建议。
  • 是的,如果你的项目在子目录中而不是在服务器的根目录中,它的工作方式与 .evn 相同。
【解决方案4】:

在您的 .htaccess 中

.htaccess 末尾的下一行

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

Laravel .htaccess 文件
选项 -MultiViews -Indexes

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

<Files .env>    <----------------at the end of .htaccess file
order allow,deny
Deny from all
</Files>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2022-12-18
    相关资源
    最近更新 更多