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

Avatar

Autor komentáře: Jarda Jirava

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

Avatar

Autor komentáře: Luděk Roleček

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.

Avatar

Autor komentáře: Pavel Weiss

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.

Avatar

Autor komentáře: Michal Kubiš

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) ?

Avatar

Autor komentáře: Michal Kubiš

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..

Avatar

Autor komentáře: Libor Kyncl

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?

Avatar

Autor komentáře: Macek

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 :)

Avatar

Autor komentáře: Mato

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?

Avatar

Autor komentáře: finn

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ěší...

Avatar

Autor komentáře: dumka

Datum vložení: 13.1.2006 23:04:52

nestacilo by premenne pri prenose zahešovat a pravidelne menit kluc?

Avatar

Autor komentáře: krteczek

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

Zpět na článek | Úvodní stránka Interval.cz