Portál AbcLinuxu, 13. května 2025 22:55
$what = $_GET["what"]; $vyber = mysql_query("SELECT * FROM ".$tabulka." WHERE ID = ".$what);Pozor, SQL Injection.
else {$heslo = $_GET["heslo"];} $filtr = "(&(cn=*$login*)(sn=*$heslo*))";Tady nevím, jestli nemůže dojít k něčemu podobnému („LDAP Injection“ :).
$heslo = $_GET["heslo"]; (…) echo (…) $hesloTady ti někdo může do té stránky vypsat libovolný kód, protože neescapuješ HTML tagy.
$filtr = "(&(cn=*$login*)(sn=*$heslo*))";Do
sn
se normálně dává příjmení, navíc heslo bývá hashované.
Nevím, jak se dělá autentizace proti LDAPu, každopádně bych si nejdřív zkusil rozběhnout nějaký minimální kód, který se jenom na něco zeptá LDAPu, a pokud by nefungoval, přišel bych až s ním. Takhle dlouhý kód ti tady nikdo ladit nebude.
Apropo, proč to má být v PHP? Třeba by šel ten webserver přesvědčit k tomu, aby dělal proti LDAPu normální HTTP autentizaci.
"(&(objectclass=posixAccount)(uid=$login))"
a nechas si navratit atribut "userPassword".
Napr. cez command line by to vyzeralo nasledovne:
ldapsearch -h server -D "cn=tvojbinddn,dc=local" -w heslo -s sub -b "ou=people,dc=local" "(&(objectclass=posixAccount)(uid=nejakyuzivatel))" userPassword
$heslo zadane uzivatelom prehodis do hash-u (MD5 alebo co pouzivas) a base64 a mozes porovnat (asi?) takto if (userPassword == base64(md5($heslo)))
.
Tiez by si mohla napisat, co za strukturu v tom LDAPe vlastne mas. V priklade vyssie predpokladam, ze objekty maju class posixAccount.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.