Php 如何限制对Laravel公用文件夹中特定路径的访问?

Php 如何限制对Laravel公用文件夹中特定路径的访问?,php,laravel,laravel-5,laravel-5.4,Php,Laravel,Laravel 5,Laravel 5.4,我想在我的Laravel应用程序中限制对public/templates/sb-admin-2路径的访问 添加此模板是安装步骤的一部分 包裹现在/templates/sb-admin-2在没有任何身份验证的情况下将我带到模板。让任何用户在生产环境中访问此模板是没有意义的。如何限制访问权限,使用户无法访问模板 谢谢TL;博士 不要这样做。 “公共”一词实际上应该是指公共的。无论放在那里的是什么,都应该是每个人都可以访问的。另外,Laravel(服务器)将首先检查文件系统,如果没有找到文件,那么它将

我想在我的Laravel应用程序中限制对
public/templates/sb-admin-2
路径的访问

添加此模板是安装步骤的一部分 包裹现在
/templates/sb-admin-2
在没有任何身份验证的情况下将我带到模板。让任何用户在生产环境中访问此模板是没有意义的。如何限制访问权限,使用户无法访问模板

谢谢

TL;博士

不要这样做。

“公共”一词实际上应该是指公共的。无论放在那里的是什么,都应该是每个人都可以访问的。另外,Laravel(服务器)将首先检查文件系统,如果没有找到文件,那么它将要求PHP解释请求

但是…

…您可以通过将文件放在单独的目录中,然后通过php释放文件来伪造行为,例如:

首先,将
public/templates/sb-admin-2
重命名为
public/xcscxcsx
(例如)。这样,任何时候任何人要求模板文件夹,都必须通过Laravel

第二,创建一个路由,该路由将检查Auth并返回请求文件的内容,或者拒绝访问

Route::get('/templates/sb-admin-2/{path?}', function () {
    if(\Auth::check()) {
        // 21 = characters count of "templates/sb-admin-2"
        $newPath = substr(ltrim($_SERVER['REQUEST_URI'], '/'), 21);
        return \File::get(
            public_path('xcscxcsx/' . $newPath)
        );
    }
    return 'access denied';
})->where(['path' => '.*']);

问题:

  • 所有文件都将可用。例如:
    /templates/sb-admin-2/.gitignore
    将显示在屏幕上
  • 任何知道存在
    xcscsx
    的人仍将拥有 访问这些文件。因此,也许可以将它们放在
    存储
    文件夹中 使用
    存储路径
    解析

如果您的Web服务器使用Apache 2.4,则可以使用以下指令将您的IP列入白名单,并阻止其他人访问该目录:

<Directory /var/www/MyDomain/public/templates/sb-admin-2>
    Require ip 192.168.0.1
</Directory>

在此处阅读有关Apache 2.4访问控制的更多信息:

将身份验证中间件添加到路由中……您不应该将此类文件放在
资源
目录中吗。问得好,可惜您没有得到更好的答案;这可能可以通过webserver配置(apache、nginx等)实现
Require ip 192.168.1.104 192.168.1.205