public function test_hasDots() { $this->assertTrue(FS::hasDots('./path/'), 'Есть точки на текущий каталог'); $this->assertTrue(FS::hasDots('../../path/'), 'Есть точки, переход на два каталога выше'); $this->assertTrue(FS::hasDots('public/../protected/lib/'), 'Есть точки перехода внутри пути'); $this->assertFalse(FS::hasDots('public/.hidden/path/'), 'Точка есть, но не управляющая. Норм'); }
/** * Пример кастомного валидатора * * Дезинфекция каталога. Валидатор для типа "filter_var". * * Заменяем слеши на прямые, в конце ставим слеш. Проверяем каталог на попытки переходов типа "../path/" * или "some/../../path/". Это недопустимо. * * @param string $value проверяемое значение * @return false|string */ public static function normalizePath($value) { if ($value) { $value = trim(str_replace('\\', '/', $value), '/') . '/'; if (FS::hasDots($value)) { return false; } } return $value; }