所以我需要的是创建一个将在我的服务器上使用的正则表达式,以确保用户请求访问的所有文件都在特定目录下。让我们将该名称命名为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
答案 0 :(得分:1)
如何解析路径并仅在事后检查(注意,行为取决于操作系统):
new File(input).getCanonicalPath().startsWith("/Server/Users/Bob/UserFiles/")
或者,取决于如何解释您的问题:
{{1}}