用于停止目录遍历的正则表达式



我正在尝试创建一个正则表达式进行验证以阻止目录遍历攻击。我希望用户能够在 C:\temp 目录中指定任何内容。所以下面很好

c:temphelloworld.txt

但显然,下面的目录是不可接受的。

c:temp..Windowsworld.txt

我的问题是我不确定我怎么能允许一个句点 (.) 而不是连续两个句点。我显然需要一个扩展,即(世界.txt),但不能有两个。这是我到目前为止所拥有的:

^([c]:\)\?(temp)([^(..)]){0,200}$

所以我试图说不是两个句点 [^\.\.],而 \\? 部分是因为它也接受转义目录。提前谢谢。

你可以

试试这个:

^(c:\)\?(temp)(?!.*..).{0,200}$

在这里,我稍微修改了您的正则表达式,以确保没有连续的点。

  1. (?!.*..) 这种负面的展望开始向右扫描找到c:temp零件后。Itd 将扫描到字符串的末尾,如果它返回 true(这意味着没有连续的点),则以下部分将采取行动。
  2. .{0,200}此处的点匹配 0 到 200 次之间的任何字符

正则表达式演示

最新更新