Autor Zpráva
Adrifinel
Profil
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
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
ShiraNai7:
Spíše za starou, pač ty kódy jsou jaksi už staršího data, takže

např.
 $typ2=  $zaznam["typ"];
může být klidně jako
 $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
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
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
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
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
Alphard:
Ať už nativní PDO nebo třeba dibi.
Nemáš o tom nějaké stručné info?
rad
Profil *
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
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
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();
Vše je ošetřeno.

U klasických dotazů
$db->query('select count(*) from tabulka where parametr1 = %i and $parametr2 = %s', $par1, $par2);
První parametr ošetří jako číslo, druhý jako řetězec.

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