Mire kell figyelni űrlapoknál biztonság szempontjából?
Olvastam róla sokat, de kíváncsi vagyok a véleményetekre, biztosan tudtok újat mondani.
Az, hogy mondjuk egy random session változó, vagy mysql_real_escape_string az egy dolog, én ennél komolyabb biztonsági tényezőkre gondoltam.
Nekem eddig csak nagyon az alapok vannak meg, annyit csinálok még, hogy van egy felhasználónév és egy jelszó az adatbázisomban. A jelszó kódolva van. Nyilván megszűröm az input mezőket, így sql injection elvileg nem történhet. Vagy igen????
A jelszó és a felhasználónév nem $password és nem $username, hogy ne lehessen hamisítani, és beírni egy php változót szűrés nélkül. Ez hülyeség például????
Akkor, amikor jó a felhasználónév és a jelszó, amit lehívott a kód, elkészít egy session-t a felhasználónévvel, és egy random generált számot szintén session-ként.
Ekkor header-el átvisz a felhasználói oldalra.
Hogyha nincs meg a két session változó, akkor header-el a login.php-ra dob, tehát ezeknek kényszerűen létezniük kell.
Mit lehet még tenni?
Így még valaki írhat egy form-ot a mezőnevekkel és elküldheti get-el url ben nem? Nyilván nem szűrve az sql kódokat. Tehát ha a felhasználó rákattint egy csali linkre, akkor elvileg kaphat sql injectiont úgy, hogy a kép valójában egy rejtett form.
Az sql parancs úgy van megírva, hogy:
$sql = "select * from login where username = '$akárminevűváltozó' " stb....
Az akárminevűváltozó neve ugye nem ismert és nem kitalálható, és elvileg csak ezzel a változóval fogad el az sql kód, de ha mégis valaki kitalálná, és esetleg GET-el küldene el valamit url-ben, akkor vajon jó az a megoldás, hogy ellenőrzöm az url-t, és ha nem csak a megadott értékeket tartalmazza pl: /login akkor átdob a kezdőoldalra?
Ez hülyeség?
Biztosan rengeteg dolog van, amit meg lehet tenni még a biztonság érdekében.
"A jelszó és a felhasználónév nem $password és nem $username, hogy ne lehessen hamisítani, és beírni egy php változót szűrés nélkül. Ez hülyeség például????"
Igen, itt mire gondoltál egyáltalán?
2 session is tök fölösleges, csak erőforrás pazarlás és valóban, ha nem invalidálja ténylegesen a sessiont, akkor abból lehet baj. Hacsak nem mindenhol átirányít ilyenkor, mind egyes oldalon.
Az az sql-t, meg ezeket a speckó változó neveket felejtsd el. Sőt a mysql_real_escape_string-et is és használ PDO-t vagy MySQLi-t rendes, paraméterezett lekérésekkel.
Pl.:
"Igen, itt mire gondoltál egyáltalán? "
Én így szoktam meghatározni a jelszó és felhasználónév sql lekérdezését:
$valami = $_POST["username"];
$másvalami = $_POST["password"];
$sql = "SELECT * from táblanév where $valami = username stb...
Hogyha a változót úgy írom be, hogy $username és $password, akkor csinál egy form-ot az általam megadott mezőkkel, és csinál egy sql lekérdezést, mert a form-ból egyébként egészen biztosan a $valami és $másvalami változóba fog menni a post tömbből az adat.
Hogyha ezek $username és $password, akkor könnyen kitalálhatók, ebben az esetben készít olyan változókat, amiket nem szűr meg, így sql injectiont tud végrehajtani.
Nem? Én ezzel próbálkoznék, ha a felhasználónév és jelszó mezők egyébként mysql_real_escape_string-gel vannak szűrve.
#3 vagyok
Kiegészítés:
Nem a PHP változóid értékét írják át, hanem az adatot, ami POST-ban van.
1) Használj mysqli-t vagy PDO-t!
2) Ellenőrizd a bemeneteket ÉS/VAGY használj előkészített lekérdezést
3) Hasheld a jelszót!
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!