此代码:
InternetAddress[] myAdrs = getAdrs(message.getToAddresses());
for (int i = 0; i < myAdrs.length; i++) {
String s = myAdrs[i].getAddress();
s = s.replace("\r","").replace("\n","").replace("%0A","").replace("%0a","").replace("%0D","").replace("%0d","");
InternetAddress adr = new InternetAddress( s, false );
// --> Improper Neutralization of CRLF Sequences ('CRLF Injection') (CWE ID 93)
lMessage.addRecipient(Message.RecipientType.TO, adr);
}
仍然给我CWE ID 93虽然我用s = s.replace(\ r \ n)删除了s中的任何不需要的字符串。 在示例中我发现一个网站s = s.replace应该是解决方案,但我仍然有这个缺陷?我想念什么? 任何提示都将非常感激!
答案 0 :(得分:1)
当Veracode不接受使用StringEscapeUtils和简单替换方法等手工解决方案时,我遇到了这种情况。 试试ESAPI库。 Veracode通常接受ESAPI作为可信工具来抵御漏洞。例如:
//need to handle ValidationException
String s = ESAPI.validator().getValidInput("User Email", myAdrs[i].getAddress(), "Email", 255, true);
InternetAddress adr = new InternetAddress( s, false );
并将正则表达式测试您的电子邮件到validation.properties(或您在ESAPI.properties
文件中指定的其他文件Validator.ConfigurationFile=validation.properties
)文件Validation.Email
属性。例如:
Validator.Email=^[A-Za-z0-9._%'-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,6}$