我试图将字符列入白名单以防止文件名并阻止路径操作。我们从前端返回一个文件名(我知道。)并解析它以确定它是否在指定的文件夹中。因此,我们需要确保用户没有传入可能从指定文件夹中逃脱的文件。这意味着我们的有效文件名是:
所以" APP-TEST-file.20161115.1"是有效但是" /../../ test // \"在检查文件系统之前需要删除一些字符。
这是我现在拥有的正则表达式,不幸的是它已经删除了太多。
public static String validateFilePath(String fileName) {
return fileName.replaceAll("[^A-Za-z0-9]+[(\\.\\/)\\+2]", "");
}
这样" APP-TEST-file.20161115.1"正在变成" APP-TEST-file0161115.1"
任何帮助都会得到满足。
答案 0 :(得分:2)
你想要这样的东西吗? (我不清楚你想要什么!)
String filename = "APP-TEST-file.20161115.1";
// replace two consecutive dots with a single dot
filename = filename.replaceAll("\\.+", ".");
// replace two consecutive forward slash with a single forward slash
filename = filename.replaceAll("/+", "/");
// replace two consecutive baskslash with a backslash
filename = filename.replaceAll("\\\\+", "\\\\");
// allow alphanumeric characters, dots and both type of slashes
filename = filename.replaceAll("[^A-Za-z0-9./\\\\]+", "");
System.out.println(filename);
打印:
APPTESTfile.20161115.1
如果filename="/../../test//\\"
,则打印 - /././test/\
。