【发布时间】:2011-09-25 12:26:04
【问题描述】:
我想测试用户给出的路径是否像这样:
my/down/path
在对面:
this/path/../../go/up
出于安全原因。
我已经做了这个:
return (bool)preg_match('#^([a-z0-9_-])+(\/[a-z0-9_-])*$#i', $fieldValue);
但是应该允许用户在他的路径中使用'.'(例如:my/./path,这没什么用但他可以),我不知道如何考虑。
然后我正在寻找一个安全的正则表达式来检查这个。
谢谢
编辑:在查看答案后,如果测试检查真实路径(删除 '.' 和 '..')是否是下行路径,那就没问题了。
【问题讨论】:
-
我添加了 [security] 标签,它应该会引起问题的更多关注,并且希望可能来自知道良好 PHP 路径遍历库的人。正如我的回答所暗示的,这是一个不平凡的问题。
标签: php regex security path filepath