Verhinderung von LDAP-injection
Arbeite ich auf meinem ersten desktop-app, die LDAP-Abfragen. Ich arbeite in C unter unix und mit opends, und ich bin neu auf LDAP. Nach woking eine Weile auf, habe ich bemerkt, dass der Benutzer in der Lage sein könnte zu verändern, die LDAP-Abfrage durch die Injektion von bösartigem code.
Ich würde gerne wissen, welche die Desinfektion der Techniken sind bekannt, nicht nur für C/unix Entwicklung, sondern im Allgemeinen, D. H., web-Entwicklung, etc.
Ich dachte, dass die Flucht gleich, und Semikolons, die ausreichen würde,, aber nicht sicher.
Hier ist ein Stückchen code, so kann ich klarer die Frage:
String ldapSearchQuery = "(cn=" + $userName + ")";
System.out.println(ldapSearchQuery);
Offensichtlich brauche ich wirklich zu bereinigen, $userName, wie bereits in diesem OWASP ARTIKEL
- Es gibt einen RFC spricht über Flucht LDAP-Suche nach Filter (ietf.org/rfc/rfc2254.txt), aber es ist nicht auf Sicherheit konzentrieren. Allerdings listet es die folgenden, denen die Flucht: * ()\, und NUL (0x00). So würde ich hinzufügen, der Stern und der backslash auf Ihrer Liste. Konnte keine wirklich maßgebliche Quelle zu diesem Thema. Nicht sicher, ob es gibt einige unicode-Winkel, den Sie brauchen zu kümmern, als auch. Persönlich habe ich eine sehr restriktive white-list (Ziffern, Zeichen, Unterstrich und Leerzeichen) Ansatz auf meine Umsetzung.
- +1 gute Frage.
- möglich, Duplikat der Wie entgeht man einem string in C#, für die Verwendung in einer LDAP-Abfrage
- Danke, ich würde eher sagen im Zusammenhang, anstatt zu duplizieren. Aber danke trotzdem, gute Frage, nehmen Sie es als eine zusätzliche Referenz (ich sah es nicht, vor dem posten meiner Frage).
- ja, auf jeden Fall verwandt. Duplizieren ist so ein subjektiver Begriff in diesen Tagen. 🙂
- haha Zustimmen. Paar Stimmen übrig, um diese zu schließen es. Glaube nicht, dass so interessante und sprachneutral Frage sollte geschlossen werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
OWASP ist eine gute security Anleitung, die ich benutze eine Menge, und hat Beispiel-code (in Java, aber Sie sollten in der Lage sein zu übersetzen):
http://www.owasp.org/index.php/Preventing_LDAP_Injection_in_Java
Auch hier ist eine Active Directory-spezifische Referenz:
http://www.rlmueller.net/CharactersEscaped.htm
Hast die Antwort in der Frage, Kommentar, schon. RFC 2254 hat.
Hier ist, was ich benutze in PHP. Etwas gleichwertiges in Ihre Sprache sollte ausreichen.
Und das ist mein C# übersetzung von escape-Funktionen im blog erwähnt von @TrueBlood.
Wenn Sie mit Frühling, es ist ein Klasse
LdapEncoder
( https://docs.spring.io/spring-ldap/docs/current/apidocs/org/springframework/ldap/support/LdapEncoder.html ), welche Methoden für die Codierung von Werten in einem filter und DNs.Diese Klasse ist eigentlich in mindestens zwei spring-Bibliotheken, spring-ldap-core und spring-security-ldap. Und zweimal in der letzteren 🙂