保护响应式文件管理器免受直接访问

Posted

技术标签:

【中文标题】保护响应式文件管理器免受直接访问【英文标题】:Protect Responsive FileManager from direct access 【发布时间】:2020-02-25 22:01:20 【问题描述】:

我正在使用响应式 FileManager 9.14.0,TinyMCE 5.0.16 和 Laravel 6 在 nginx 1.16.1 上运行

我有以下文件夹结构:

| public
|    |- uploads
|    |- thumbs
|    |- filemanager
|    |- js
|    |   |- tinymce
|    |   |   |- plugins
|    |   |   |   |- responsivefilemanager
|    |   |   |   |   |- plugin.min.js

我使用 laravel 身份验证来保护“创建”页面,用户可以使用 tinyMCE 添加文本并使用 RFM 作为 tyniMCE 插件上传图片。

但如果使用以下 URL,则可以直接访问 RFM

http://www.myhost.test/filemanager/dialog.php

如何防止这种行为。我希望 RFM 只能从 tinyMCE 编辑器访问。

【问题讨论】:

为什么将文件存储在公用文件夹中?我并不是说这通常是不好的做法,但是如果我想阻止访问文件(文件不是路由),我会首先将其移出公用文件夹 那太好了,但是如何配置文件管理器呢?例如目前我在tinyMCE初始化external_filemanager_path:"/filemanager/", 有以下参数如果文件在公用文件夹之外怎么办? 我不确定这是否可行,但您可以尝试将路径设置为external_filemanager_path:"../storage/filemanager/", 我建议您自己(手动)在其中创建文件夹,然后更改配置并进行测试。跨度> 【参考方案1】:

我不熟悉 laravel 但...

在响应式文件管理器 9.0 中有一个名为 config 的文件夹,其中包含 config.php

| public
|    |- uploads
|    |- thumbs
|    |- filemanager
|    |   |- config
|    |   |   |- config.php
|    |- js
|    |   |- tinymce
|    |   |   |- plugins
|    |   |   |   |- responsivefilemanager
|    |   |   |   |   |- plugin.min.js
    打开 config.php 并更改 define('USE_ACCESS_KEYS', false); // TRUE or FALSE -------- to ------> define('USE_ACCESS_KEYS', true); // TRUE or FALSE

这会强制响应式文件管理器使用 Aaccess Key 来防止所有尝试访问您的文件和文件夹。

    在第 190 行的同一文件中,添加他们需要使用文件管理器的用户 auth_key 。 例如:

    username: jim auth_key: a1s2d3f4g5h6j7k8l9mmusername: lisa auth_key: zqxwd3f4vrbth6j7btny

所以第 190 行应该改写如下:

'access_keys' => array( "a1s2d3f4g5h6j7k8l9" , "zqxwd3f4vrbth6j7btny"),

    转到您的表单并添加一个按钮/链接以访问响应文件管理器

    <a href="https://www.example.com/admin/responsive-filemanager/filemanager/dialog.php?akey=<?php echo your authenticated user AUTH_KEY; ?> </a>

如果没有 your authenticated user AUTH_KEY 有两种方法: 1)) 在您的用户表中添加一列 auth_key 并生成 auth_key,对于他们想要访问数据库和 config.php 文件中的响应式文件管理器的用户来说,该 auth_key 应该是相等的。 2)) 使用用户名而不是 auth_key 所以你在第 19 行的配置将是: 'access_keys' => 数组(“吉姆”,“丽莎”),

现在您的响应式文件管理器访问链接将如下所示:

<a href="https://www.example.com/admin/responsive-filemanager/filemanager/dialog.php?akey=jim ></a>

jim 在这里是静态的,你应该通过调用函数使其动态化,以返回经过身份验证的用户 USERNAME 并将其放在链接中的 &akey= 之后

现在,如果在 access_key 数组中找到链接中的键值,则响应式文件管理器页面将正常工作,否则它会显示访问被拒绝!!!

【讨论】:

【参考方案2】:

如果它仍然相关,我可以向你展示我在 Laravel 8 中是如何做到的

我从相反的方向着手 - 如果用户在管理员下登录,则无需检查它,因此 USE_ACCESS_KEYS 执行 FALSE,否则 - TRUE

因此,如果他没有通过管理员身份验证,那么他将无法访问 ResponsiveFileManager。

为此,在responsive_filemanager/filemanager/config/config.php文件的开头某处添加这样一个函数。

(指定您自己的文件路径 '/vendor/autoload.php''/bootstrap/app.php')

function use_access_keys() 
    require dirname(__DIR__, 4) . '/vendor/autoload.php';
    $app = require_once  dirname(__DIR__, 4) . '/bootstrap/app.php';
    $request = Illuminate\Http\Request::capture();
    $request->setMethod('GET');
    $app->make('Illuminate\Contracts\Http\Kernel')->handle($request);
    if (Auth::check() && Auth::user()->hasRole('admin')) 
        return false;
    
    return true;

然后这一行:

define('USE_ACCESS_KEYS', false);

替换为:

define('USE_ACCESS_KEYS', use_access_keys());

还有一刻。 如果之后打开FileManager,突然弹出如下错误:“Undefined variable: lang”

然后打开responsive_filemanager/filemanager/dialog.php

找到数组 $get_params 并在其中更改如下:

'lang' => 'en',

【讨论】:

以上是关于保护响应式文件管理器免受直接访问的主要内容,如果未能解决你的问题,请参考以下文章

Android 保护清单和布局免受逆向工程

Windows10无法创建映射网络驱动器: 你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的 来宾访问,这些策略可帮助保护你的电脑免受网络上不安全设备或者恶 意设备的威胁

Windows10无法创建映射网络驱动器: 你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的 来宾访问,这些策略可帮助保护你的电脑免受网络上不安全设备或者恶 意设备的威胁

保护 Azure 存储免受公共 Internet 访问

如何保护 CFC 中的 access="remote" 功能免受窥探?

我们保护我们的班级免受谁的侵害?