na netu jsem se docet, ze kdyz si dam na svejch strankach vyhledavani v DB, tak mi nektery uzivatele(znalci SQL) mohou jistym dotazem smazat celou DB.
Je to pravda? A jak se proti tomu mam chranit?
Zatim v dotazu zakazuju slova drop a delete. Ale nevim jestli to staci(z bepecnostnich duvodu ten dotaz totiz nybyl uveden).
addslashes
http://cz.php.net/addslashes
problém je v tom, že ti do sql dotazu niekto narve úvodzovky(z formulára napr.). Mysql pochopí, že má urobiť niečo iné... Ak tieto znaky budú olomítkované, tak je to v poho.
Novšie verzie AFAIK majú zapnuté rovno olomítkovanie z $_GET a $_POST
takže sa to nedá moc napadnúť
trápny príklad z vyhľadávania:
originál
select * from clanky where text LIKE '%".$_POST["hladaj"]."%'
-------------
sql injection
select * from clanky where text LIKE
'%
nieco %'; drop table clanky; select * from clanky where text like '% nieco //toto sa doplna
%'
------------
ak je zapnute olomitkovanie tak to bude
select * from clanky where text LIKE
'%
nieco %\'; drop table clanky; select * from clanky where text like \'% nieco //toto sa doplna
%'
AFAIK ale mysql_query nepošle viac ako 1 dotaz.
2misho: jestli bude addslashes(); stacit, tak je to imho to nejlepsi reseni ze kterych jsem vybiral
vsem moc dekuju
A neni tady zaply magic quotes? By se to mělo dělat automaticky...
na string addslashes();
na integer intval();
brej den
function MojeAddSlashes($string) {
if (get_magic_quotes_gpc() == 1) {
return ($string);
} else {
return (addslashes($string));
}
}
na string addslashes()
u číselných hodnot zajistit libovolným způsobem jejich převedení na číslo za každých okolností - (int)$prom nebo intval($prom) nebo $prom+0 .....
Tady to je nastaveny automaticky. takze se o to neumis starat. Jo a kdyby to nebylo zaply tak to nemusi bejt jen vyhledavani ale jakejkoliv form kterej přistupujes do DB. Třeba login apod.