阻止公开访问env文件

时间:2015-06-19 02:31:32

标签: php security laravel laravel-5

我刚刚发现Laravel 5可能输出敏感数据,并可能导致许多主机的进一步利用:

https://www.google.com/search?q=intext%3ADB_PASSWORD+ext%3Aenv&gws_rd=ssl

我想知道保护.env文件的方法。我可以在.htaccess文件中使用以下代码来保护我的.env文件不受浏览器视图影响吗?

# Protect .env
<Files .env>
Order Allow,Deny
Deny from all
</Files>

.htaccess中的上述代码是否可以保护我的.env文件?

5 个答案:

答案 0 :(得分:5)

这不是一个漏洞,如果有人正确安装Laravel,它甚至不是远程问题 - webroot是public文件夹,而不是存储库/项目根目录。

laravel中的配置文件和.env文件未包含在webroot中,因此您只需确保您的webroot为path/to/project/public

您提供的Google查询实际上只是一群在安装Laravel之前没有阅读文档的人。

答案 1 :(得分:2)

如果执行

config:cache
在部署过程中使用

命令,应确保仅从配置文件中调用env函数。一旦配置被缓存,将不会加载.env文件,并且所有对env函数的调用都将返回null。

因此在实时服务器中,您可以在执行config:cache命令后删除.env文件

答案 2 :(得分:1)

恕我直言,保护配置文件不被浏览的最佳方法是将其置于公共目录之外。通过.htaccess保护它可能具有欺骗性,如果出现问题,您的文件将公开发布。

答案 3 :(得分:0)

我想指出您的解决方案仅有助于屏蔽实际的.env文件。启用调试模式时,在使用Whoops处理程序(以及可能还有其他错误处理程序)时,如果发生错误,环境变量也会显示给访问者(这甚至可能是404)。

总结别人在这个帖子中所说的话。如果出现以下情况,则.env文件存在安全问题:

  • 您已在公共目录中安装了laravel,例如,可以是public,www或public_html。确保laravel安装中包含的文件夹public是唯一通过Web服务器公开的文件夹。或者,您可以使用.htaccess保护.env文件;但这不是一个真正的解决方案。
  • 您已启用调试模式,错误处理程序显示包含所有环境变量的调试模式。禁用调试模式或对其进行配置,以便仅为特定用户或ips启用它。这可以防止在调试页面上共享环境变量。

答案 4 :(得分:0)

您好,您可以创建一个

<块引用>

.htaccess

在同一位置创建文件并编写以下代码。

# Disable index view
Options -Indexes

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