Как определить соответствие уровня каталога корня в регулярных выражениях? - PullRequest
1 голос
/ 31 марта 2019

Я создаю простой файловый менеджер, который сканирует каталог и перечисляет файлы и каталоги в нем, включая повышение уровня на три точки ../.мой "корневой" каталог - E:/wamp/www, и я не хочу, чтобы он разрешал мне доступ к родительскому каталогу.

Я использую следующее регулярное выражение:

(^E\:\/wamp\/www\/)(\.\.\/$|\.\.\/.*?(\.\.\/)+$)|(^E\:\/wamp\/www\/([^\/]+\/)+)(\.\.\/.*?(\.\.\/)+)

по порядкудля предотвращения следующих ситуаций:

  1. E: / wamp / www /../
  2. E: / wamp / www / dir /../../
  3. E: / wamp / www / dir / subdir /../../../

Но я обнаружил, что также возможно сделать что-то такое:

  • E: / wamp / www / dir /../ dir /../../

и т. Д.

Как можно предотвратить такие ситуации и ограничитьэто будет только E:/wamp/www с использованием регулярных выражений, когда это происходит?

1 Ответ

1 голос
/ 31 марта 2019

Вы можете использовать функцию realpath(): realpath

Из документации:

realpath () раскрывает все символические ссылки и разрешает ссылки на /./, /../ и дополнительные / символы во входном пути и возвращает канонизированный абсолютный путь.

Не полагайтесь только на свой код, чтобы предотвратить запись файлов там, где их не следует писать, установите соответствующие разрешения для ваших каталогов.

...