Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# REGEX停止目录遍历_C#_Asp.net_Regex - Fatal编程技术网

C# REGEX停止目录遍历

C# REGEX停止目录遍历,c#,asp.net,regex,C#,Asp.net,Regex,我试图创建一个正则表达式进行验证,以阻止目录遍历攻击。我希望用户能够指定C:\temp目录中的任何内容。所以下面的是好的 c:\temp\hello\world.txt 但显然,下面的目录是不可接受的 c:\temp\..\Windows\world.txt 我的问题是,我不确定如何允许一个周期(.)而不是连续两个周期。显然,我需要一个扩展名,即(world.txt),但不能有两个。这就是我到目前为止所做的: ^([c]:\\)\\?(temp)([^(\.\.)]){0,200}$ 所以

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

c:\temp\hello\world.txt
但显然,下面的目录是不可接受的

c:\temp\..\Windows\world.txt
我的问题是,我不确定如何允许一个周期(.)而不是连续两个周期。显然,我需要一个扩展名,即(world.txt),但不能有两个。这就是我到目前为止所做的:

^([c]:\\)\\?(temp)([^(\.\.)]){0,200}$
所以我想说的不是两个句号[^\.\.\.]和\\?部分原因是它也接受转义目录。提前感谢。

您可以尝试以下方法:

^(c:\\)\\?(temp)(?!.*\.\.).{0,200}$
这里我对正则表达式做了一些修改,以确保没有连续的点

  • (?!.\.\.\)
    此负向前瞻开始向右扫描 找到
    c:\temp
    零件后。Itd将扫描到字符串的末尾,如果它返回true(这意味着没有连续的点),那么下面的部分将执行操作
  • {0200}
    这里的点匹配0到200次之间的任何字符

  • 是什么让你认为正则表达式是这里的正确工具?我不太确定如何验证目录。这是一个带有C#codebehind的aspx应用程序。如果有更好的方法,我愿意接受。这不是一个新问题。很有可能存在已经编写、测试和调试的现有代码,可以为您解决问题。找到那个代码。感谢所有回复的人,我正在寻找替代方法,但已经将Rizwan的答案标记为正确。。。因为这是唯一的实际答案,正则表达式可以工作:)。