如何识别正则表达式中的目录级别匹配根?

问题描述 投票:1回答:1

我正在创建一个简单的文件管理器,它扫描目录并列出其中的文件和目录,包括升级三点../。我的“root”目录是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

php regex pcre
1个回答
1
投票

你可以使用realpath()函数:realpath

从文档:

realpath()展开所有符号链接并解析对输入路径中的/./,/../和extra / characters的引用,并返回规范化的绝对​​路径名。

不要只依赖代码来防止文件写入不应写入的位置,在目录上设置适当的权限。

© www.soinside.com 2019 - 2024. All rights reserved.