Hogyan tudok ebben az esetben sql injekció ellen védekezni?
Van nekem egy menu.php fájlom, amiben a menüpontok tartalmai jelennek meg, amiket mysql adatbázisból hívok le, get segítségével alkalmazom tehát url cím így jelenik meg: menu.php?id=1 vagy menu.php?id=2 és így tovább. Előbb figyelmeztettek, hogy így eléggé törékeny az oldalam és sql injekció alkalmazható. Mit tudok ez ellen tenni? A lehívásom így valósul meg:
$postid = $_GET['id'];
$data = mysql_query("SELECT * FROM datas WHERE post_id = '".$postid."' ORDER BY id DESC") or die(mysql_error());
Köszönöm előre is a válaszokat!
Egyrészt ne a mysql_ kezdetű függvényeket használd, hanem a mysqli_ kezdetűeket v. PDO-t. Ezen kívül pedig használj preparated statementeket a query-k összerakásához és ne így stringként fűzögesd össze.
Ez az alap. Aztán még lehet extraként betenni olyasmit, hogy a bemenetekből az SQL foglalt szavait kidobálod (SELECT, DROP) - persze ez bizonyos helyzetekben problémás lehet.
Itt nálad a "legkönnyebb" megoldás az lenne, ha a $_GET lekérésekor egy mysql_real_escape_string-et ráhívnál.
Ugyanakkor a "szebb" megoldás az lenne, ha a sima mysql_* hívásokat elfelejtenéd, mivel már deprecated és nem javasolt a használata és áttérnél a mysqli-re vagy a PDO-ra, ahol szép prepared statementeket lehet írni.
Így van. Nem mellesleg a prepared statement segítségével megúszható, hogy teleszórd* a forrásfájlokat mysqli_real_escape_string hívásokkal.
* [link]
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!