在我们的Java应用程序中,用户可以将数据导出到易于使用CSV Injection的excel文件。为避免此漏洞,我想限制用户输入,例如= HYPERLINK(E3,F3),如果任何参数以下列字符开头:
Equals to ("=")
Plus ("+")
Minus ("-")
At ("@")
我尝试了一些正则表达式:
^[^+=@-]
^((?![+=@-]).)*
但是这些在bean验证中没有按预期工作。
你只需要像这样逃避正则表达式中的特殊字符:
String csvInjectionRegex = "^[^\\+\\=@\\-]";
以下字符是需要在正则表达式中转义的字符:
<([{\^-=$!|]})?*+.>
要逃避他们,你要么:
"\\"
\Q
和\E
中的每个特殊字符。例如:("\\Q|\\E")
String csvInjectionRegex = "^[^"+Pattern.quote("+-=@")+"]";
试试这个:
if (value.matches("^[+=@-].*")) {
//DO M
}