更改文件夹结构以删除公用文件夹时对 Laravel 5 安全性的影响
Posted
技术标签:
【中文标题】更改文件夹结构以删除公用文件夹时对 Laravel 5 安全性的影响【英文标题】:Affect on security of Laravel 5 when change folder structure to remove public folder 【发布时间】:2015-10-04 00:27:09 【问题描述】:我是 Laravel 5 的新手。
我在 Stack Overflow 上找到了这个 Laravel 5 - Remove public from URL,以便从我的 Laravel 5 应用程序中删除公用文件夹。只有我对安全性有疑问。
当我从 URL 中删除 public 时,我必须更改 Laravel 5 的基本文件夹结构。是的,如果没有来自 URL 的 public,它可以正常工作。
但是 Laravel 的安全性如何,因为我正在更改默认文件夹结构?使用起来安全吗?
【问题讨论】:
您可能应该解释一下您以何种方式从 URL 中删除了 public,因为您提供的链接并没有说得很清楚。你使用了重写规则吗? @Jeemusu,我正在使用这种方法,一个包含所有 laravel 5 文件夹和文件的新文件夹,没有公用文件夹,以及在我的根文件夹上设置的公用文件夹的所有文件(删除公用文件夹) . index.php 中的更改。一切都完成了,希望它清楚。从 url 中删除公共路径。 【参考方案1】:您应该将 Apache 主机根目录指向 $LARAVEL_PATH/public
目录,而不是 $LARAVEL_PATH
。
为 www 主机根目录而不是项目根目录设置子目录的意义在于,您不会通过 Web 服务器泄漏任何项目文件。
即使所有 PHP 文件都有文件后缀 .php
,恶意用户仍可以访问您的 $LARAVEL_PATH/storage
目录及其子目录内容,读取您的 composer.json
或 package.json
以查找易受攻击的依赖项或读取 .env
文件等等
如果您在共享主机上运行并且您必须使用 public_html
,请尝试在该 public_html
目录之外安装 Laravel,然后删除 public_html(如果为空)并将其替换为指向 $LARAVEL_PATH/public OR if you want the Laravel instance to be subdirectory of
public_html, do the same but create symlink from
的符号链接$LARAVEL_PATH/publicto
public_html/$PROJECT_SUBDIR`。
该公共目录的存在是为了使项目更加安全。解决实际问题,不要试图破坏这个简单但很好的安全添加。 :)
【讨论】:
感谢@trm42 的宝贵回答。只有一个问题,我的主机包含超过 2 个 Laravel 站点,然后如何管理 public_html 之外的同一个文件夹。 虚拟目录结构:/home/user | /site1 | /site2 | /public_html 然后,从 site1/public -> public_html/site1 创建符号链接,然后,从 site2/public -> public_html/site2 或符号链接 site1/public -> public_html 和符号链接 site2/public site1/public/site2 创建符号链接 与使用 Apache VHOST,但应该可以工作。抱歉,这里的格式很糟糕:/ 感谢您的回复,VHOST 可以在共享主机上使用。我认为你的回答需要投票。 另外,如果你想在同一个 VHOST 中不同路径下的不同 Laravel 实例,你可以在 VHOST 配置中使用 Alias 和 Directory 配置,参见:***.com/questions/6307047/… 从 site1/public 到 public_html/site1 的符号链接对我不起作用。但是从 public_html/site1 到 laravel 项目区域 site1/public 确实是一种享受!基本上,PHP 路径中的“..”工作正常。【参考方案2】:你提供的这个链接并不是要改变框架的实际文件结构,这个例子使用mod_rewrite
来重写你的应用程序的url。换句话说,您是在告诉服务器您希望指向该目录,但最终用户无法看到完整路径。
还请查看您提供的链接的以下答案。
将 Laravel 根文件夹中的 server.php 重命名为 index.php 并 将 .htaccess 文件从 /public 目录复制到你的 Laravel 根目录 文件夹。 - 而已 !! :)
【讨论】:
嗨,哈利,我正在尝试 .htaccess,但没有运气。然后我使用这种方法,一个包含所有 laravel 5 文件夹和文件的新文件夹,没有公用文件夹,以及在我的根文件夹上设置的公用文件夹的所有文件(删除公用文件夹)。 index.php 中的更改。一切都完成了,希望它清楚。从 url 中删除公共路径。 请看这里:tutsnare.com/remove-public-from-url-laravel。请尽量把你的cmets写得更清楚,你的句子结构让我感到困惑。谢谢,报告一下进展情况:) Harry,谢谢,但我的问题是关于这些更改完成后的安全性。使用起来安全吗? 安全是一个相对的东西,一个系统不可能是 100% 安全的,总有一个后门,如果你想获得过去的证券,那就是黑客攻击。这实际上取决于您是否设置了服务器配置。例如,尝试禁用服务器上的文件索引,使应用程序的某些部分仅对具有管理员帐户的用户可用,使您的.env
文件不可读,检查您的 php 脚本是否存在可能的漏洞等......安全是一件复杂的事情,而且有很多要考虑的。这是一篇关于如何保护apache 的文章,例如
不要,只需将 larvel 根文件夹中的 server.php 重命名为 index.php,然后从公共目录 cp .htaccess 到那里。这将从路径中删除“公共”,但它不会安全地保护您。尝试访问“.env”文件,您仍然可以这样做。这不是一个好的解决方案!以上是关于更改文件夹结构以删除公用文件夹时对 Laravel 5 安全性的影响的主要内容,如果未能解决你的问题,请参考以下文章