Autor Zpráva
david_host
Profil *
Ahoj, mám dotaz. Pokud potřebuji vypsat stánku která má url "index.php?id=2" tak potřebuji ověřit aby v id nebylo nic co by mi mohlo narušit databázi. Napadlo mě že nejednoduší je přetypovat $_GET['id'] na int a pak by neměl nikde být problém ne?
Když budu za databaze tahat vše kde id == přetypovaný $_GET['id'].
Připadá mi to jako poměrně jednoduchá obrana, ale nevím jestli není někde nějaký zádrhel, který mi utíká. Na netu jsem toho zatím moc nenašel.
Taps
Profil
david_host:
pokud používáš databázi tak můžeš využít intval pro čísla a mysql_real_escape_string pro text
DarkMeni
Profil
Můžeš to přetypovat, můžeš použí i intval ale já mam rači podmínku is_numeric, když to číslo má být ale nebude tak z databáze zbytečně nic tahat nebudu zatímco intval by něco vyndat mohl, jinak ochranu databáze zajistí i mysql_real_escape_string(řetězec)
david_host
Profil *
mysql_real_escape_string je taková snadno zapamatovatelná fce :D.. Ale jde mi ted o cisla. na intval ještě kouknu.
ShiraNai7
Profil
Pro čísla stačí toto:
$id = @(int)$_GET['id'];
YoSarin
Profil
ShiraNai7:
proč je tam ten @? Přetypování může taky vyhodit nějakou chybu?
ShiraNai7
Profil
YoSarin:
Může, pokud $_GET['id'] neexistuje.
YoSarin
Profil
ShiraNai7:
Aha, kvůli tomuhle bych ten @ napsal přímo před $ (ať je na první pohled patrné k čemu patří), i když výsledek je podle všeho stejný... Stejně si myslím, že neexistence předaných parametrů by se měla ověřovat dřív a zvlášť (ale nechme OT :) )
david_host
Profil *
neexistenci overuju předtím takže to není problém
david_host
Profil *
DarkMeni:
To se mi víc líbí is_int :)
ShiraNai7
Profil
david_host:
V $_GET jsou vždy řetězce nebo pole, pokud si to nepřetypuješ. is_int by tedy vždy vrátilo false.
david_host
Profil *
ano ano, už jsem na to včera přišel. Děkuji moc za pomoc.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0