Autor | Zpráva | ||
---|---|---|---|
Adrifinel Profil |
#1 · Zasláno: 18. 10. 2011, 19:29:07
namátkově:
MySQL_Select_DB("$db"); $vysledekrep = MySQL_Query("SELECT * FROM ikonky WHERE nazev NOT LIKE '$ikonka' ORDER BY level ASC, typ ASC, ID ASC LIMIT $limit")or die (mysql_error()); $id = MySQL_Query("SELECT ID FROM `users` WHERE jmeno LIKE '$jmeno'"); Jsou tyhle dotazy samy o sobě dostatečně zabezpečené proti sql/php injection aneb by se tam mělo použít spíše mysql_real_escape_string? A pochopila jsem dobře, z toho co jsem se o zabezpečení snažila přečíst, že bych měla nahradit query escape stringem? |
||
ShiraNai7 Profil |
#2 · Zasláno: 18. 10. 2011, 19:57:54
Adrifinel:
„MySQL_Select_DB("$db");“ Proměnné není třeba dávat do uvozovek! Co to je za novou módu? „Jsou tyhle dotazy samy o sobě dostatečně zabezpečené proti sql/php injection“ Nevidím odkud přichází proměnné $ikonka, $limit a $jmeno. Upravil bych to nasledovne: MySQL_Select_DB($db); $vysledekrep = MySQL_Query("SELECT * FROM ikonky WHERE nazev NOT LIKE '".mysql_real_escape_string($ikonka)."' ORDER BY level ASC, typ ASC, ID ASC LIMIT ".intval($limit))or die (mysql_error()); $id = MySQL_Query("SELECT ID FROM `users` WHERE jmeno LIKE '".mysql_real_escape_string($jmeno)."'"); |
||
Adrifinel Profil |
#3 · Zasláno: 18. 10. 2011, 20:50:02
ShiraNai7:
Spíše za starou, pač ty kódy jsou jaksi už staršího data, takže např. $typ2= $zaznam["typ"]; $typ2= $zaznam[typ]; Já co tu tak dávám kódy, tak se zatím nikdo proti tomu neozval anebo jsem to nepostřehla :) Když jsme u toho hádám, že tohle, asi nebude samo o sobě bezpečnej dotaz, měla bych asi použit spíše $_POST [typ], že? Při opravě prvního dotazu mi přestane fungovat stránování, všechny výsledky se řadí na poslední stránku. if ($page == ""): $page = "1"; else : endif; if ($limit==""): $begin = ($page * 50) - 50; $limit = "$begin, 50"; else: ; endif; Promněná limit |
||
Spectator Profil |
#4 · Zasláno: 18. 10. 2011, 21:55:59
Adrifinel:
„měla bych asi použit spíše $_POST [typ], že?“ Tady nejde o typ získání hodnoty. Řešit get nebo post v tomto případě na bezpečnosti dotazu db nemá smysl. Důležité je řešit CO je v v proměnných uloženo. před odesláním dat do dotazu je důležité odstranit v řetězcích znaky, které mají v mysql smysl a mohou dotaz nepředvídatelně (záměrně) ovlivnit. mysql_real_escape_string(string) je funkce escapující tyto znaky. |
||
ShiraNai7 Profil |
#5 · Zasláno: 18. 10. 2011, 22:04:02
Adrifinel:
> např. > 1 > $typ2= $zaznam["typ"]; > může být klidně jako > 1 > $typ2= $zaznam[typ]; > ? Ne. Kdyz chci pouzit promennou, tak pouziju proste $promenna. Kdyz chci pouzit klic z pole, tak napisu $pole['klic'] (protoze klic je retezec). Bez uvozovek je to brano jako konstanta a haze to notice. |
||
Adrifinel Profil |
#6 · Zasláno: 18. 10. 2011, 22:25:37
Spectator:
Escapující znamená, že je to stornuje/ vyruší, že? Je mysql_real_escape_string a a použítí string např. u function img2sm($string) jedno a to samé? A je dobré odstraňovat pokud možno radši všechny potenciální napadnutelné tězce či zkazím něco, pokud to použiji byť by riziko bylo velmi malé? ShiraNai7: Má namysli error_reporting 2047? Takže tohle je : $zaznam1["nazev"] ten $pole['klic'] že? |
||
Alphard Profil |
#7 · Zasláno: 18. 10. 2011, 22:45:36
Nikdo to tady nezmínil, ale existují pokročilejší přístupy k db, které řeší escapování automaticky, psát 10x mysql_real_escape_string() v každém insertu je otrava. Ať už nativní PDO nebo třeba dibi.
Pokud jde o použití uvozovek, prostudujte základy a když něco hledáte v manuálu nebo jiných důvěryhodných zdrojích, dívejte se i na syntaxi. |
||
Adrifinel Profil |
#8 · Zasláno: 18. 10. 2011, 23:24:33
Alphard:
„Ať už nativní PDO nebo třeba dibi.“ Nemáš o tom nějaké stručné info? |
||
rad Profil * |
#9 · Zasláno: 18. 10. 2011, 23:40:24
Pripojim se s dotazem rad bych svoji starou tridu k pripojovani k databazi atd prevedl na neco modernejsiho -> bezpecnejsiho PDO se mi zda jako dobra volba.
Chtel jsem se zeptat jak presne PDO resi mysql_real_escape automaticky ? uz neni pak potreba kazkou promenou kontrolovat ? |
||
Lamicz Profil |
#10 · Zasláno: 19. 10. 2011, 02:24:00 · Upravil/a: Lamicz
rad:
Oddelenim SQL dotazu od dat pouzitim tzv. placeholderu. Pokud je to napsano vse dohromady "postaru", tak se musi volat $pdo->quote() (tzn. obdoba mysql_real_escape_string(), akorat se pouzije escapovani podle driveru pouzite databaze). PDO |
||
Alphard Profil |
#11 · Zasláno: 19. 10. 2011, 07:11:13
Já zmínil i PDO, ale spíš bych doporučil dibi. Ta dokumentace je nekompletní, ale v balíku je i examples.
Pro vkládání třeba stačí $db->insert('jmeno_tabulky', $pole_s_daty)->execute(); U klasických dotazů $db->query('select count(*) from tabulka where parametr1 = %i and $parametr2 = %s', $par1, $par2); |
||
Časová prodleva: 14 let
|
0