2017-01-02 4 views
0

Ich versuche, eine App zu entwickeln und scannte meinen Code mit checkmarx und bekam Problem unter - LDAP-Injektion in der folgenden Methode.LDAP-Injektion Problem in checkmarx:

Update(request.getparameter("userID")) 

rufen wir diese Methode und unter Verwendung von request.getParameter(), um den entsprechenden Wert zu erhalten, checkmarx Problem bei request.getParameter zeigt ("Benutzer-ID"),

Problem Beschreibung ist " der Wert dieses Element fließt dann durch den Code ohne korrekt desinfiziert werden oder validiert und wird schließlich in einer LDAP-Abfrage in Methode“

so finden Sie eine der Möglichkeiten, habe ich versucht,

String userID = request.getparameter("userID"); 
if(userID == null && userID.isEmpty){ 
    throw new ServletException(); 
} 
else 
    Update(userID); 

mit den obigen Änderungen wird auch das Problem nicht gelöst.

Haben Sie eine Idee, dieses Problem zu lösen?

+0

Ich weiß nicht, checkmarx, aber ich denke, dass das Problem der Eingangsparameter ist, die nicht bereinigt.Theoretisch ist es bei einem hartcodierten Literal nicht notwendig, aber ich weiß nicht, wie streng checkmarx damit ist. –

Antwort

1

Sieht so aus, als ob Checkmarx Ihren Code als anfällig für LDAP-Injection markiert.

Was ist LDAP-Injektion?

Unzulässige Neutralization of Special Element verwendet, in einer LDAP-Abfrage ('LDAP Injection')

Die Software konstruiert alle oder einen Teil einer LDAP-Abfrage unter Verwendung von extern beeinflußten Eingabe von einer stromaufwärtigen Komponente, aber Es neutralisiert oder neutralisiert keine speziellen Elemente, die die beabsichtigte LDAP-Abfrage ändern könnten, wenn sie an eine Downstream-Komponente gesendet werden.

Zitat von CWE-90: Improper Neutralization of Special Elements used in an LDAP Query ('LDAP Injection') genommen

Wie zu mildern?

Der Schutz vor LDAP-Injektionen erfordert eine genaue Codierung und sichere Serverkonfiguration. Front-End-Anwendungen sollten die Eingabeüberprüfung durchführen und alle potenziell schädlichen Symbole einschränken. Entwickler können reguläre Ausdrücke verwenden, um nicht vertrauenswürdige Eingaben zu überprüfen. Der folgende reguläre Ausdruck kann den Umfang von möglichen Angriffen begrenzen, indem sie nur Zahlen und Buchstaben erlaubt:

/[^0-9a-z]/i 

Filtration Führen von abgehenden Daten als zusätzliche Sicherheitsstufe. Geben Sie keine Informationen aus, die nicht mit der Funktionalität der Anwendung zusammenhängen. Implementieren Sie die korrekte Zugriffssteuerung für Daten im LDAP-Verzeichnis , legen Sie die entsprechenden Berechtigungen für Benutzerobjekte fest, und deaktivieren Sie den anonymen Zugriff auf Verzeichnisobjekte durch .

Zitat und Beispiel aus LDAP Injection Vulnerability | CWE-90 Weakness | Exploitation and Remediation

+0

Ich habe auch reguläre Ausdrücke verwendet, um die Benutzer-ID zu validieren. aber immer noch ist das Problem aufgetreten. – dinky

+0

@vanam Können Sie hier den Code eingeben, den Sie zur Überprüfung der Benutzer-ID verwendet haben? – yaloner

+0

Danke yaloner für Ihre schnelle Antwort. Hier ist der Code, den ich mit regulärem Ausdruck versucht habe. userID = request.getParameter ("Benutzer-ID"); if (userID == null && userID.isEmpty) { neue ServletException() werfen; } else { Zeichenfolge USERID_PATTERN = "[a-zA-Z] {2} \\ d {3} [a-zA-Z | 0-9] {1}"; \t Muster userID_Pattern = Pattern.compile (USERID_PATTERN); \t Matcher Matcher = BenutzerID_Pattern.Matcher (BenutzerID); \t if (! Matcher.matches()) { \t \t \t neue ServletException() werfen; \t \t} \t sonst \t \t \t \t Update (Benutzer-ID); } – dinky