Kezdőoldal » Számítástechnika » Programozás » PHP kódomról vélemény? Jó így...

PHP kódomról vélemény? Jó így használni, ha nem akkor hogy?

Figyelt kérdés

A lényeg hogy kiiratom az adatbazis termékek táblát

, és mindegyik terméket belehelyezem egy linkbe pl:

while () {

echo "<a href='index.php?product=$r[id]'>$r['name']</a> ";

}

És ha rákattintok, akkor az adott ID-ju elemet tolti be:

if(isset($_GET[product])) {

$query = "select * from product where id=$_GET[product]";

}


2014. febr. 6. 11:04
 1/8 anonim ***** válasza:
Minimum egy mysql_real_escape_string kellene oda.
2014. febr. 6. 11:07
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:

Amit előző írt,az a múlté.

PDO MySQL-t kezd inkább tanulmányozni.

2014. febr. 6. 11:13
Hasznos számodra ez a válasz?
 3/8 A kérdező kommentje:

iigy?

if(isset(mysql_real_escape_string($_GET[product]))) {

2014. febr. 6. 11:13
 4/8 anonim ***** válasza:

Nem igazán jó főleg nekem a második részével if(isset($_GET[product])) {

$query = "select * from product where id=$_GET[product]";

}

el van bajom. Ez a kód teljesen alkalmas az úgynevezett sql injekciós támadásra. Mivel nem ellenörződ a $_GET['product'] változó értékét ezért megcsinálhatja egy külső támadó a következő nagyon csúnya utasítást,ha a $_GET['product']-nak megadja a következő

3;drop table product. Mivel a sql értelmező ezt fogja végrehajtani, így gyak törölte a tábládat. De pl. meglepetést okozhat ha valahogy kitalálja a userek adatait tartalmazó táblát és valahogy kiíratja az admin jelszót, persze csak annak hashét, ha te azt használtad.

Éppen ezért, én a következőt tenném, és nem utolsó sorban $_Post-os paraméterátadást kellene használni:

Nem a legszebb megoldás de legalább azt megnézném, hogy numerikus-es az id. Illetve egy mysql_real_escape_stringet is végrehajtanék.

Azaz


if(isset($_POST['product'] && is_numeric($_POST['product'])

{

$id=$_POST['product'];

$query = sprintf("SELECT * FROM product WHERE id='%s');

mysql_real_escape_string($id);

}

A numerikus ellenörzés után azért használom, a mysql_real_escape_string-et, mert könnyen meg lehet adni 16-os számrendszerben is a megfelelő karakterek kódját és ekkor az isnumeric be van "csapva". Persze ne felejtsd el végrehajtani a $query-t sem.

2014. febr. 6. 11:21
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:
De tény, hogy a PDO-s lekérdezés a legtisztább megoldás.
2014. febr. 6. 11:23
Hasznos számodra ez a válasz?
 6/8 A kérdező kommentje:
De ha post-ot hasznalok akkor nem fogom latni az URL-be hogy melyik ID- keresem nem?
2014. febr. 6. 11:25
 7/8 anonim ***** válasza:
Valóban, POST-nál nem az URL-ben vannak a paraméterek. De nem is ez a gond, hogy most GET-et vagy POST-ot használsz, hanem az, hogy ellenőrzés nélkül beszúrod az SQL kódba, ami onnan (a klienstől) jön. Ez az amit nem szabad. :)
2014. febr. 6. 11:42
Hasznos számodra ez a válasz?
 8/8 A kérdező kommentje:

meg akarom tartani a GET-et hogy eltujam linkelni valakinek a keresett terméket. Mert POST-al én nem tudom:/

Szóval akkor csak le kell védeni a GET változót. Szóval akkor nincs másmilyen hivatkozás nem? Másmilyen URL elérés. Mert nagyon sok helyen láttam, ezt , és gondoltam így <a href>-el csinaljak. Megprobalok csinalni egy masikat. Véleményezhetitek ha van idő rá:D

2014. febr. 6. 15:30

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!