如果你可能在输入中接受任意符号,则此处 casNo.matches(“\d±\d±\d+$”) 存在安全漏洞,因为这个正则表达式只允许短横线,但是攻击者可以尝试其他符号,这可能导致正则表达式的绕过或解析错误。
为此,我们建议使用Java自带的Pattern类对正则表达式进行编译并在运行时执行错误处理,以提高安全性。具体操作如下:
Pattern pattern = Pattern.compile("^\\d+-\\d+-\\d+$");
Matcher matcher = pattern.matcher(casNo);
if(!matcher.matches()){
InvalidCell invalidCell = createInvalidCell(importDangerousCargoInfo.getRowIndex(), 2, LocaleMessageUtils.getMessage("Exception.svl.dangerous-cargo-apply-import-check-cas-no-regular"));
result.add(invalidCell);
}
上述修改中,使用Pattern类的compile()方法编译正则表达式,并通过matcher()方法创建Matcher对象,然后调用matches()方法对输入的字符串进行验证。通过这种方式,可以避免正则表达式的安全漏洞。