Java bean验证正则表达式摆脱CSV注入

问题描述 投票:1回答:2

在我们的Java应用程序中,用户可以将数据导出到易于使用CSV Injection的excel文件。为避免此漏洞,我想限制用户输入,例如= HYPERLINK(E3,F3),如果任何参数以下列字符开头:

Equals to ("=")
Plus ("+")
Minus ("-")
At ("@") 

我尝试了一些正则表达式:

^[^+=@-]

^((?![+=@-]).)*

但是这些在bean验证中没有按预期工作。

java regex security bean-validation
2个回答
0
投票

你只需要像这样逃避正则表达式中的特殊字符:

String csvInjectionRegex = "^[^\\+\\=@\\-]";

以下字符是需要在正则表达式中转义的字符:

<([{\^-=$!|]})?*+.>

要逃避他们,你要么:

  • 使用反斜杠"\\"
  • 或者使用\Q\E中的每个特殊字符。例如:("\\Q|\\E")
  • 如果您有任何疑问,请使用Pattern.quote(specialString):

String csvInjectionRegex = "^[^"+Pattern.quote("+-=@")+"]";


0
投票

试试这个:

  if (value.matches("^[+=@-].*")) {
      //DO M
  }
© www.soinside.com 2019 - 2024. All rights reserved.