use realpath and validate tpl directory contents

to ensure only php files inside the tpl dir can get used as templates
This commit is contained in:
El RIDO 2025-11-11 09:34:54 +01:00
parent dae5f7fd61
commit f2164353c3
No known key found for this signature in database
GPG key ID: 0F5C940A6BD81F92
2 changed files with 22 additions and 4 deletions

View file

@ -12,6 +12,7 @@
namespace PrivateBin;
use Exception;
use GlobIterator;
/**
* View
@ -49,13 +50,21 @@ class View
*/
public function draw($template)
{
$dir = PATH . 'tpl' . DIRECTORY_SEPARATOR;
$file = substr($template, 0, 10) === 'bootstrap-' ? 'bootstrap' : $template;
$path = PATH . 'tpl' . DIRECTORY_SEPARATOR . $file . '.php';
if (!file_exists($path)) {
$path = realpath($dir . $file . '.php');
if ($path === false) {
throw new Exception('Template ' . $template . ' not found!', 80);
}
extract($this->_variables);
include $path;
foreach (new GlobIterator($dir . '*.php') as $tplFile) {
if ($tplFile->getRealPath() === $path) {
$templatesInPath = new GlobIterator(PATH . 'tpl' . DIRECTORY_SEPARATOR . '*.php');
extract($this->_variables);
include $path;
return;
}
}
throw new Exception('Template ' . $file . '.php not found in ' . $dir . '!', 81);
}
/**