Biztonsági kérdés
Sziasztok!
Amatőr szinten készitgetek egy oldalt PHP és MySQL használatával. Ez ügyben szeretném kérni a hozzáértők segitségét egy biztonsági kérdésben:
Pl. ilyen az egyik megoldásom:
---------------------
<?php
$sqlparancs="SELECT * FROM felhasznaloi_adatok WHERE login_nev = $nev AND login_pass = $jelszo ";
$eredmeny=mysql_query($sqlparancs, $kapcsolat);
// ide jön a php kód többi része...
?>
<form name="login" method="post" action="<?php print($PHP_SELF); ?>">
<input type="text" name="nev" size="10">
<input type="password" name="jelszo" size="10">
<input type="submit" name="Submit" value="Belépés">
</form>
----------------
A profik szerint itt biztonsági rés van. Amivel könnyen meg lehet tenni bármit az adatbázisommal, vagy ki lehet listázni a PHP kódot és hasonlók.
Én ezzel próbálkoztam, trükközgettem, de egy MySQL szintaktikai hibán kívül nem tudtam mást elérni. Én nem értek hozzá annyira hogy ennél többet el tudjak érni.
Szóval hogy lehet a fenti kódon keresztül az adatbázisomat módosítani vagy egyéb dolgokat megtenni? Ahhoz hogy tenni tudjak ellene, előbb jó lenne ismerni a biztonsági rés kihasználásának módjait is.
Köszönettel:
Vadmancs
vadmancs##kukac##uze.net
■ Amatőr szinten készitgetek egy oldalt PHP és MySQL használatával. Ez ügyben szeretném kérni a hozzáértők segitségét egy biztonsági kérdésben:
Pl. ilyen az egyik megoldásom:
---------------------
<?php
$sqlparancs="SELECT * FROM felhasznaloi_adatok WHERE login_nev = $nev AND login_pass = $jelszo ";
$eredmeny=mysql_query($sqlparancs, $kapcsolat);
// ide jön a php kód többi része...
?>
<form name="login" method="post" action="<?php print($PHP_SELF); ?>">
<input type="text" name="nev" size="10">
<input type="password" name="jelszo" size="10">
<input type="submit" name="Submit" value="Belépés">
</form>
----------------
A profik szerint itt biztonsági rés van. Amivel könnyen meg lehet tenni bármit az adatbázisommal, vagy ki lehet listázni a PHP kódot és hasonlók.
Én ezzel próbálkoztam, trükközgettem, de egy MySQL szintaktikai hibán kívül nem tudtam mást elérni. Én nem értek hozzá annyira hogy ennél többet el tudjak érni.
Szóval hogy lehet a fenti kódon keresztül az adatbázisomat módosítani vagy egyéb dolgokat megtenni? Ahhoz hogy tenni tudjak ellene, előbb jó lenne ismerni a biztonsági rés kihasználásának módjait is.
Köszönettel:
Vadmancs
vadmancs##kukac##uze.net
A truck :)
A jelszonak valaki a kovetkezot irja:
valami";select * from felhasznaloi_adatok;
vagy valami ilyesmi. Tehat ilyenkor a le tud futtatni sql parancsokat pluszban.
A trukk a kovetkezo pld.: A
A jelszonak valaki a kovetkezot irja:
valami";select * from felhasznaloi_adatok;
Ez nekem is eszembe jutott, de tudomásom szerint a PHP mysql_query parancsa csak 1 db MySQL utasítást enged lefuttatni, kulönben simán szintaktikai hibával megáll.
http://docs.php.net/hu/function.mysql-query.html
Itt fel is van tüntetve hogy nem lehet benne ";"-ő, pedig ez lenne ami leválasztja egymástól a MySQL utasításokat - ha jól tudom.
Vadmancs
vadmancs##kukac##uze.net
védekezés
Ha nem akarsz nagyon körmönfont lenni, akkor minden ilyen esetben használod a php addslashes függvényét, ami a különböző idézőjeleket bekódolja neked, így csak mint adat tudnak majd szerepelni.
--------
Poetro
Biztonsági kérdés
http://docs.php.net/hu/security.database.html
Üdv, csko
A WFSZ biztonsági ajánlásai webfejlesztők számára
http://wfsz.njszt.hu/projektek_biztonsag.php
pp
Köszönöm a sok segitséget
Vadmancs
vadmancs##kukac##uze.net
azert azt tegyuk fel, hogy ez
login_pass = '$jelszo' csak lemaradt a ' ' a beirasodkor:) stringeket ugye mindig valami koze rakunk. nade ekkor is, ha nem csinalsz semmit, egy $jelszo="' or '1'='1"; ertekkel kapasbol benyel barmit a lekerdezesed. "... login_pass = '' or '1'='1' ..." lesz ugye belole.