Starší komentáře ke článku: Bezpečnost především - bezpečnější příkazy SQL
Zpět na článek | Úvodní stránka Interval.cz
Datum vložení: 7.8.2002 10:08:19
Jen bych rad jeste doplnil dalsi veci, ktere je mozne vyuzivat v ASP proti MS SQL serveru (nevim jak je na tom MySQL s pristupem via ADO).
V ADO existuje objekt ADODB.Command, ktery ma vlastnost Parameters, kam je mozne predat vsechny parametry uvedene v dotazu. Jelikoz se definuje i datovy typ parametru, jakekoli "nestandartnosti" jsou odhaleny pri vytvareni parametru a je generovana chyba. Tudiz tu nehrozi pripad, ze nahodou zapomeneme osetrit nejaky vstup a utocnik se stejne do vasi databaze dostane.
Uvedu radeji priklad, at se tady nebavime o obecnych vecech. Doufam, ze to zacinajicim programatorum pomuze.
Mejme tedy dotaz pro vyber:
strSQL = "SELECT col1, col2, col3 FROM pohled_na_tabulku WHERE col4 = @paramcol4"
Nastavime si hodnotu parametru, @paramcol4 se ma rovnat treba 4
iHodnotaParametru = 4
vytvorime si objekt Command a predame mu parametr.
set param = Command.CreateParameter("@paramcol4",adInteger,adParamInput,4,iHodnotaParametru)
Command.Parameters.Append param
muzeme si otestovat zda nedoslo k chybe, protoze parametr musi byt ciselny
potom muzeme s klidem naplnit hodnotu parametru iHodnotaParametru jinou hodnotu a provest dalsi vyber
iHodnotaParametru = "ABCD"
param.Value = iHodnotaParametru ' zde dojde k chybe
atd. atd.
Tento pristup mi pripada "cistejsi" nebot nemusim neustale myslet na vsechny kontroly, ktere je treba udelat s parametrem pred jeho vstupem do dotazu. Takto to pouzivam ja a navic jeste s vyuzitim SP.
Dekuji, ze jste docetli az sem a snad Vam to pomuze v dalsi praci.
Jarda
Datum vložení: 7.8.2002 14:56:34
Předpokládám, že to tak autor myslel a jen se špatně vyjádřil, ale pokud by si za svým názorem přeci jenom stál, tak bych si dovolil polemizovat hned s první větou "Hned po napsání aplikace bychom měli pamatovat na její bezpečnost. " Podle mě, je třeba na bezpečnost myslet už při psaní aplikace (ne hned potom), nebo ještě lépe - dlouho předtím, než vůbec napíšu první řádek programu.
Datum vložení: 9.8.2002 12:59:42
ASP & SQL : ono vubec neni obecne optimalni, aby ASP aplikace mela vubec tuseni o databazi, ta ma pouzivat nejake komponenty a ne primo lezt do data storage, bych teda rekl.
Datum vložení: 7.8.2002 15:10:20
Nestacilo by osetrit nasledovne ( pridat znaky ' ) ?:
<B>"SELECT * FROM table WHERE id=\'$id\' "</B>
a potlacit chybove hlasky (v pripade zadania \" " ' pri retazcoch) ?
Datum vložení: 7.8.2002 15:14:15
syntax mala byt nasledovna:
<B>"SELECT * FROM table WHERE id='$id' "</B>
odmietalo mi v predmete spravy zobrat text s uvodzovkami (" ' ), tak som skusal, ako to tam dostat..
Datum vložení: 10.8.2002 1:58:49
Podle meho nazoru by u id, pokud je to skutecne cislo, uvozovky byt nemusely, staci promennou promenit v ciselnou hodnotu takto:
"SELECT * FROM table WHERE id= ".intval($id)
Docela by me zajimalo, jestli ma tento zapis nejakou vadu nebo negativum?
Datum vložení: 16.8.2002 15:58:07
intVal($i) dle me neni nejlepsi reseni :) ja jsem se naucil testovat vstupni ciselnou hodnotu takto:
// $i ... int
if (intVal(strVal($i) != $i) exit();
prijde mi to jako nejlepsi a nejbezpecnejsi zpusob jak osetrit zda je na vstupu cislo :)
Datum vložení: 4.1.2003 21:42:20
Mohli by ste prosim vysvetlit blizsie tento zapis:
if (intVal(strVal($i) != $i) exit();
Podla mna by uplne stacilo na kontrolu toto:
if (!is_numeric($i)) exit();
Este mam jednu otazku. Pouzival som kontrolu pomocou
regulárnych výtazov:
if (!ereg("^[[:digit:]]{1,3}$", $id)) exit();
Myslím že to je dobré, ale nie je to pomalé oproti
vyššie uvedeným spôsobom?
Datum vložení: 18.2.2004 12:55:20
Náhledem do zdrojového kódu stránky jsem zjistil, že ačkoliv stránka o sobě tvrdí, že je napsána dle normy <B>XHTML 1.0 Strict</B>, obsahuje cosi jako <B>bgcolor="..."</B>, kvůli čemuž není z ukázek vidět nic. Na serveru věnovanému webdesignu to obzvlášť potěší...
Datum vložení: 13.1.2006 23:04:52
nestacilo by premenne pri prenose zahešovat a pravidelne menit kluc?
Datum vložení: 5.4.2006 10:31:58
1. v tabulce mám sloupec hash_nazvu kde pri napsani clanku vygeneruji a ulozim md5() názvu článku. 2. v adrese mi jako parametr muže přijít cokoliv: [b]index.php?clanek=jakykoliv-text[/b] 3. převedu příchozí na hash [b]$page=md5($_GET['clanek']);[/b] 4. Použiji v dotaze: [b]$dotaz="select * from tabulka where hash_nazvu='".$page."' limit 1";[/b] Ptám se má tohle řešení nějakou realnou nebo hypotetickou bezpečnostní (nebo jinou) chybu? krteczek