正则表达式禁止访问父目录 - java

时间:2015-10-26 21:22:45

标签: java regex directory

所以我需要的是创建一个将在我的服务器上使用的正则表达式,以确保用户请求访问的所有文件都在特定目录下。让我们将该名称命名为UserFiles,并假设它位于/Server/Users/Bob/UserFiles路径下。

现在,当客户端发送读取文件的请求时,我想验证他要求访问的路径是否在/Bob/UserFiles/下。

我考虑过确保路径的前缀始终以/Userfiles/开头,并且路径中没有..(这样也可以保护我免受限制访问,例如{{1} })

不允许输入的示例:

/UserFiles/../../noAccess.txt

C:/UserFiles/

../../Alice/txt.txt

允许输入的示例:

/UserFiles/../../noAccess.txt

/UserFiles/UserFiles/Alice/txt.txt

/UserFiles/txt.txt

我无法想到为什么这不起作用的任何情况。我也尝试构建正则表达式,但它不太正确,因为它允许像/UserFiles/Bob/Bob/txt.txt这样的输入(可能允许更多它不应该我不知道)

我的想法是完整的还是还有其他我没有想到的情况?如果我的想法完整,你可以帮我修复我的正则表达式吗?

/UserFiles//txt.txt

1 个答案:

答案 0 :(得分:1)

如何解析路径并仅在事后检查(注意,行为取决于操作系统):

new File(input).getCanonicalPath().startsWith("/Server/Users/Bob/UserFiles/")

或者,取决于如何解释您的问题:

{{1}}