shell bypass 403
<?php namespace JoeDixon\Translation; use Illuminate\Filesystem\Filesystem; class Scanner { private $disk; private $scanPaths; private $translationMethods; public function __construct(Filesystem $disk, $scanPaths, $translationMethods) { $this->disk = $disk; $this->scanPaths = $scanPaths; $this->translationMethods = $translationMethods; } /** * Scan all the files in the provided $scanPath for translations. * * @return array */ public function findTranslations() { $results = ['single' => [], 'group' => []]; // This has been derived from a combination of the following: // * Laravel Language Manager GUI from Mohamed Said (https://github.com/themsaid/laravel-langman-gui) // * Laravel 5 Translation Manager from Barry vd. Heuvel (https://github.com/barryvdh/laravel-translation-manager) $matchingPattern = '[^\w]'. // Must not start with any alphanum or _ '(?<!->)'. // Must not start with -> '('.implode('|', $this->translationMethods).')'. // Must start with one of the functions "\(". // Match opening parentheses "[\'\"]". // Match " or ' '('. // Start a new group to match: '.+'. // Must start with group ')'. // Close group "[\'\"]". // Closing quote "[\),]"; // Close parentheses or new parameter foreach ($this->disk->allFiles($this->scanPaths) as $file) { if (preg_match_all("/$matchingPattern/siU", $file->getContents(), $matches)) { foreach ($matches[2] as $key) { if (preg_match("/(^[a-zA-Z0-9:_-]+([.][^\1)\ ]+)+$)/siU", $key, $arrayMatches)) { [$file, $k] = explode('.', $arrayMatches[0], 2); $results['group'][$file][$k] = ''; continue; } else { $results['single']['single'][$key] = ''; } } } } return $results; } }