![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/framework/Filesystem/Directory/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Framework\Filesystem\Directory; use Magento\Framework\Exception\ValidatorException; use Magento\Framework\Filesystem\DriverInterface; use Magento\Framework\Phrase; /** * Validates paths using driver. */ class DenyListPathValidator implements PathValidatorInterface { /** * File deny list using regular expressions * * @var string[] */ private $fileDenyList = ["htaccess"]; /** * Deny list exception list * * @var string[] */ private $exceptionList = []; /** * @var DriverInterface */ private $driver; /** * @param DriverInterface $driver */ public function __construct(DriverInterface $driver) { $this->driver = $driver; } /** * @inheritDoc */ public function validate( string $directoryPath, string $path, ?string $scheme = null, bool $absolutePath = false ): void { $realDirectoryPath = $this->driver->getRealPathSafety($directoryPath); $fullPath = $this->driver->getAbsolutePath( rtrim($realDirectoryPath, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR, $path, $scheme ); if (!$absolutePath) { $actualPath = $this->driver->getRealPathSafety($fullPath); } else { $actualPath = $this->driver->getRealPathSafety($path); } if (in_array($fullPath, $this->exceptionList, true)) { return; } foreach ($this->fileDenyList as $file) { $baseName = pathinfo($actualPath, PATHINFO_BASENAME); if (strpos($baseName, $file) !== false || preg_match('#' . "\." . $file . '#', $fullPath)) { throw new ValidatorException( new Phrase('"%1" is not a valid file path', [$path]) ); } } } /** * Allow addition of new exceptions given full path * * @param string $fullPath */ public function addException(string $fullPath) { if (!in_array($fullPath, $this->exceptionList)) { array_push($this->exceptionList, $fullPath); } } /** * Allow addition of new exceptions given full path * * @param string $fullPath */ public function removeException(string $fullPath) { if (($key = array_search($fullPath, $this->exceptionList)) !== false) { unset($this->exceptionList[$key]); } } }