【问题标题】: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/", 我建议您自己(手动)在其中创建文件夹,然后更改配置并进行测试。跨度>

标签: laravel nginx tinymce responsive-filemanager


【解决方案1】:

我不熟悉 laravel 但...

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

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

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

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

    username: jim auth_key: a1s2d3f4g5h6j7k8l9mm
    username: lisa auth_key: zqxwd3f4vrbth6j7btny

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

'access_keys' => array( "a1s2d3f4g5h6j7k8l9" , "zqxwd3f4vrbth6j7btny"),
  1. 转到您的表单并添加一个按钮/链接以访问响应文件管理器

    <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',

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 2013-01-03
      • 2012-05-21
      • 1970-01-01
      • 2010-10-11
      相关资源
      最近更新 更多