2017-11-28 3 views
0

Dieser Code:Unsachgemäße Neutralization von CRLF Sequenzen ('CRLF Injection') in Mailadresse in JAVA

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); 
    } 

gibt mir immer noch die CWE-ID 93, obwohl ich alle unerwünschten Strings s mit s = s.replace entfernt (\ r .... In den Beispielen fand ich eine die Bahn die s = s.replace die Lösung sein sollte, aber ich habe immer noch diesen Fehler? Was ich? würde verpassen Sie Irgendwelche Hinweise sehr dankbar!

+0

Aktuelle Versionen von JavaMail sollten vor CRLF-Injektion in Adressen schützen. Haben Sie dies getestet, um festzustellen, ob eine CRLF-Injektion tatsächlich möglich ist? Oder ist das nur ein falsches positives Ergebnis von einem statischen Analysetool? –

+0

Danke für die Antwort. Ja, ich denke es ist ein "falsch positives", da ich keine InternetAdresse [] mit crlf's einfügen kann. Und überhaupt - wenn es welche gäbe, würde ich sie im Code entfernen ... Also sollte alles in Ordnung sein? Aber da der Kunde diesen Bericht "sieht", wäre es sehr gut, wenn der Fehler beseitigt wäre! Irgendein Tipp, wie man diesen Fehler definitiv loswerden kann? – Dan

+0

Keine Ahnung. Welches Werkzeug verwenden Sie, um diese Fehler zu erkennen? Vielleicht basieren seine Regeln auf alten Versionen von JavaMail? –

Antwort

1

I in solchen Situationen, in denen Veracode keine handgefertigten Lösungen wie die Verwendung von StringEscapeUtils und einfache Ersetzungsmethoden akzeptiert 210 Versuchen Sie die ESAPI-Bibliothek. Veracode akzeptiert in der Regel ESAPI als vertrauenswürdiges Tool, um Sicherheitslücken zu schließen. Zum Beispiel:

//need to handle ValidationException 
String s = ESAPI.validator().getValidInput("User Email", myAdrs[i].getAddress(), "Email", 255, true); 
InternetAddress adr = new InternetAddress(s, false); 

Und regex setzen Sie Ihre E-Mail validation.properties zu testen (oder eine andere Datei, die Sie in ESAPI.properties Datei als Validator.ConfigurationFile=validation.properties angeben) als Validation.Email Eigenschaft Datei. Zum Beispiel:

Validator.Email=^[A-Za-z0-9._%'-][email protected][A-Za-z0-9.-]+\\.[a-zA-Z]{2,6}$