保护响应式文件管理器免受直接访问
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: a1s2d3f4g5h6j7k8l9mm
username: 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',
【讨论】:
以上是关于保护响应式文件管理器免受直接访问的主要内容,如果未能解决你的问题,请参考以下文章
Windows10无法创建映射网络驱动器: 你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的 来宾访问,这些策略可帮助保护你的电脑免受网络上不安全设备或者恶 意设备的威胁
Windows10无法创建映射网络驱动器: 你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的 来宾访问,这些策略可帮助保护你的电脑免受网络上不安全设备或者恶 意设备的威胁