JAVA中Mailadress中CRLF序列的中和不正确('CRLF注入')

时间:2017-11-28 19:17:53

标签: java javamail veracode crlf-vulnerability

此代码:

    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应该是解决方案,但我仍然有这个缺陷?我想念什么? 任何提示都将非常感激!

1 个答案:

答案 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}$