From e1a487bd88d8fa9baaeb0d52b21e985d7d4e0238 Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Fri, 28 Aug 2020 13:34:40 +0300 Subject: [PATCH] Fixed a glitch which allows user to delete entire pages directory [#1941] --- CHANGELOG.md | 6 ++++++ classes/admincontroller.php | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a078d63..52d831b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# v1.9.16 +## mm/dd/2020 + +1. [](#bugfix) + * Fixed a glitch which allows user to delete entire pages directory [#1941](https://github.com/getgrav/grav-plugin-admin/issues/1941) + # v1.9.15 ## 06/08/2020 diff --git a/classes/admincontroller.php b/classes/admincontroller.php index 17e0b6a0..95295ac5 100644 --- a/classes/admincontroller.php +++ b/classes/admincontroller.php @@ -487,6 +487,11 @@ class AdminController extends AdminBaseController $data = (array)$this->data; + $folder = $data['folder'] ?? ''; + if ($folder === '' || mb_strpos($folder, '/') !== false) { + throw new \RuntimeException('Creating folder failed, bad folder name', 400); + } + if ($data['route'] === '/') { $path = $this->grav['locator']->findResource('page://'); } else { @@ -494,7 +499,7 @@ class AdminController extends AdminBaseController } $orderOfNewFolder = static::getNextOrderInFolder($path); - $new_path = $path . '/' . $orderOfNewFolder . '.' . $data['folder']; + $new_path = $path . '/' . $orderOfNewFolder . '.' . $folder; Folder::create($new_path); Cache::clearCache('invalidate'); @@ -585,6 +590,11 @@ class AdminController extends AdminBaseController /** @var PageInterface $obj */ $obj = $this->admin->page(true); + $folder = $data['folder'] ?? null; + if ($folder === '' || mb_strpos($folder, '/') !== false) { + throw new \RuntimeException('Saving page failed: bad folder name', 400); + } + if (!isset($data['folder']) || !$data['folder']) { $data['folder'] = $obj->slug(); $this->data['folder'] = $obj->slug(); @@ -814,6 +824,10 @@ class AdminController extends AdminBaseController $folder = \Grav\Plugin\Admin\Utils::slug($data[substr($folder, 9)]); } $folder = ltrim($folder, '_'); + if ($folder === '' || mb_strpos($folder, '/') !== false) { + throw new \RuntimeException('Creating page failed: bad folder name', 400); + } + if (!empty($data['modular'])) { $folder = '_' . $folder; }