Autor | Zpráva | ||
---|---|---|---|
drak654 Profil |
#1 · Zasláno: 4. 6. 2011, 20:34:00
URL:
http://localhost/?kat=1 PHP: ... $kat = $_GET["kat"]; $query = "SELECT id FROM hlasovania WHERE kat=".$kat." ORDER BY cas DESC"; $result = mysql_query($query); while($row=mysql_fetch_array($result) { ... } ... Keď je všetko tak, ako má byť, všetko funguje. Avšak problém nastane vtedy, keby si niekto zmenil adresu na http://localhost/?kat=1%20or%20kat=2 $query = "SELECT id FROM hlasovania WHERE kat=1 or kat=2 ORDER BY cas DESC"; |
||
DarkMeni Profil |
#2 · Zasláno: 4. 6. 2011, 20:41:34
vono je těch horších scénářů víc (například kdyby napsal: "kat=;--;DROP TABLE hlasovania;DROP DATABASE databaze... atd" ale někdy stačí funkce mysql_real_escape_string který změní ukončení příkazu na obyčejný středník, a nebo použitím větvení:
$kat = mysql_real_escape_string($_GET["kat"]); if(is_numeric($kat)){ //mysql_query... } |
||
pcmanik Profil |
#3 · Zasláno: 4. 6. 2011, 20:48:12 · Upravil/a: pcmanik
DarkMeni:
A pri obycajnych cislach dobre posluzi intval() |
||
DarkMeni Profil |
#4 · Zasláno: 4. 6. 2011, 21:11:10
s intval jsem se ještě nesetkal a angličtinu moc neovládám ale "The scalar value being converted to an integer" asi znamená něco jako převod na integer (celé číslo), sice to zabrání udělání nějakého nepořádku v databázi ale potom nepůjde logovat podezření na hacknutí:
$kat = mysql_real_escape_string($_GET["kat"]); if(is_numeric($kat)){ //mysql_query... }else{ $ip = $_SERVER["REMOTE_ADDR"]; mysql_query("INSERT INTO logs (type, value, ip) VALUES ('PossibleXSS', ".$kat.", ".$ip.")"); } I když je to skoro k ničemu tak jestli návštěvník nebude muset měnit už připravenou url a stejně jí změní tak asi moc čistý úmysly mít nebude a v případě pokusu o smazání tabulek nebo tak něčeho, tak tomu někomu zablokuju přístup z té IP, teda jestli bude vidět že to myslel fakt vážně. |
||
drak654 Profil |
#5 · Zasláno: 4. 6. 2011, 21:14:19 · Upravil/a: drak654
mysql_real_escape_string() musím použiť 5 krát, čo mi spomaľuje načítanie stránky o nejakých 5 sekúnd. Dá sa s týmto niečo robiť?
// A vlastne nie. Je všetko v poriadku. Tak ďakujem za rady. |
||
pcmanik Profil |
#6 · Zasláno: 4. 6. 2011, 23:36:59
DarkMeni:
Ono to vsetko vyhodi a necha len cisla, ale ak to skutocne chces logovat tak potom dobre, inak este odporucam prepare_statements, ale treba na to rozlisenie mysqli, no ma to vela vyhod :) |
||
Časová prodleva: 13 let
|
0