Input validáció

+2 votes
asked Mar 24, 2014 in IRF tantárgy by wafle (41 points)  

Kell foglalkozni az inputban lévő ldap szempontjából speciális karakterekkel?
Fel kell készülni arra, hogy egy DN tartalmaz pl ,-t vagy *-ot?

2 Answers

+2 votes
answered Mar 25, 2014 by nadudvarit (1,121 points)  

Attól függ: ha a bemenetet keresési filterként használod akkor például egy benne szereplő * komoly problémát jelenthet. (LDAP injection) Ilyenkor a keresés szempontjából speciális karakterek ellenőrzése fontos.

Viszont ha azt kell ellenőrizni, hogy a DN helyes-e és létezik-e, annak más egyszerűbb módja is van. Például lehet végezni egy keresést a kapott DN-től indulva, csak a csomópont szintjén (base/alap/0. szintű keresés). Ilyenkor már csak a szerver válaszát kell megfelelően értelmezni.

commented Mar 25, 2014 by wafle (41 points)  
Köszönöm, így már sikerül a *-os eset, a ,-s azonban nem.
Felvettem egy "\,Consolidated" nevű partnert, és megpróbáltam rákeresni, ami nem sikerült akárhogy próbáltam escapelni a ,-t.
Hosszas próbálkozás után megpróbáltam kilistázni a fenti bejegyzést tartalmazó tárolót. Itt is InvalidDN hibát dobott a pyldap. Lehet ezzel kezdeni valamit? Írjak bugreportot a fejlesztőknek?
commented Mar 25, 2014 by nadudvarit (1,121 points)  
edited Mar 25, 2014 by nadudvarit
Már megtetted (a bugreportot), és köszönöm.
Törlöd a problémás entry-t Apache Directory Studioval, mert gondolom így mindig elő fog jönni ez a probléma.

Viszont a keresés során kapott InvalidDN hiba a szervertől jön és nem kliensoldalról, arra építhetsz validálásnál.
commented Mar 30, 2014 by Pietro (72 points)  
Az, hogy "a keresés során kapott InvalidDN hiba a szervertől jön és nem kliensoldalról, arra építhetsz validálásnál", konkrétan mit jelent? Nálam van - többek közt - a pyldap.errors.InvalidDN hibára egy exception-kezelő blokk, aminek során kiírom az "ERROR: " kezdetű stringgel, hogy hibát tartalmazott a DN, majd kilépek. Ez megfelelő hibakezelésnek számít?
commented Mar 30, 2014 by nadudvarit (1,121 points)  
Igen, az úgy jó lehet.
Kicsit hosszabban, hogy konkréten mit jelent: amikor a search függvénnyel helytelen DN sztringgel hívod meg a szerver visszaküld egy hibakódot, ami InvalidDN exceptionre fordul át.

Viszont, ha felveszel az entryk közé egy speciális karaktert tartalmazó DN-t a címtárba, majd ezután rákeressel a részfára, amiben található, szintén InvalidDN-t kaphatsz a bug miatt.
Ez azért van, mert amikor a szervertől visszakapod az entryket (köztük a spécit is) a modul az adatokból LDAPEntryket fog építeni, ennek az is része, hogy a DN attribútumon LDAPDN osztály konstruktora meg lesz hívva. Ebben a konstruktorban van egy hibás validálási folyamat, ami szintaktikailag helyes (escape-elt spéci) DN-re is InvalidDN exceptiont fog dobni.
commented Mar 30, 2014 by Pietro (72 points)  
Értem, köszi! Tehát akkor az általad említett 0. szintű keresés (létezik-e ilyen OU), plusz az exceptionök kezelése megfelelő lehet.

Még a bemeneti paraméterek validációjával kapcsolatban: a bemenetet keresési filterként sehol sem használom, csakis Base DN-ként használom fel közvetlenül - ekkor is igaz, hogy "a keresés szempontjából speciális karakterek ellenőrzése fontos", vagy akkor itt úgyis a korábban tárgyalt InvalidDN hiba érkezik a szervertől, és lényegében készen vagyunk?
 
Milyen jellegű validációra gondoljunk még a kivételkezelésen kívül, ha keresési filterként NEM használjuk fel a felhasználótól érkező adatot?
commented Mar 30, 2014 by nadudvarit (1,121 points)  
Ez így elég lehet.
commented Mar 30, 2014 by Pietro (72 points)  
Rendben, köszönöm! :)
0 votes
answered Mar 29, 2014 by majgab91 (77 points)  

Helló!

Nekem is lenne hasonló kérdésem. Én a felhasználótól származó inputot nem keresési filterként használom, hanem arról a szintről indítok keresést (base). Azonban itt is előfordultak furcsaságok. Pl. létrehoztam olyan bejegyzést, mely tartalmazott \ karaktert. Ezt a Directory Studio szépen lekezelte, escapelte magának (\\ lett bejegyezve), és ott meg is jeleníti a találati listában, ha rákeresek. Azonban pythonból akárhogyan próbálok escapelni, folyton InvalidDN hibákat kapok. Hogyan tudom ezt kezelni / kell-e ezt kezelni?

commented Mar 30, 2014 by nadudvarit (1,121 points)  
Valószínűleg a Python modulban lévő bug miatt nem tudod az Directory Studioval frissen felvett entry-t visszanyerni (de egy példakód alapján lehet többet tudok mondani). Minden lekérdezés, amiben szerepel az általad felvett speciális karakteres entry InvalidDN errorral el fog szállni.

Ettől függetlenül inputnak jöhet egy olyan DN, ami formailag nem helyes, ezt megfelelően kezelni kell.
commented Mar 30, 2014 by majgab91 (77 points)  
Köszönöm szépen a választ. Kezelem a szintaktikai hibás DN-t, csak jelenlegi állás szerint pl. cn=\Józsi,dc=irf,dc=local DN-re is szintaktikai hibát fog mondani a python, annak ellenére, hogy ez létezhet.

EDIT:

Most olvastam el az utolsó kommentedet az előző válaszra. Abból jól veszem ki, hogy akkor ez így nem probléma?
commented Mar 30, 2014 by nadudvarit (1,121 points)  
Nem probléma.
...