Starší komentáře ke článku: Elektronický obchod v ASP - správa databáze

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

Avatar

Autor komentáře: Andrei Badea

Datum vložení: 10.10.2002 14:07:19

... nebot jinak se skladani SQL dotazu pouzitim neovereneho vstupu od uzivatele rict neda. Co takhle pouzivat parametricke dotazy, nebo treba ulozenou proceduru?

Dale skladani retezcu (strText) jako napr. v prehledu produktu je v ASP pomale, protoze retezec se musi pri kazdem spojeni s dalsim alokovat znovu. Mel by byt pouzit Response.Write alespon pro kazdy radek produktu.

O storadkovem prikazu select case by se take dalo diskutovat, co takhle presunout obsah jednotlivych case vetvi do procedur (kdyz uz to teda chcete mit vsechno v jedne strance)? Nebylo by to prehlednejsi?

Avatar

Autor komentáře: Harp

Datum vložení: 10.10.2002 14:24:01

Souhlas, to mne taky hnalo k tomu, ze pisu do diskuse. Pokud takhle vypada ukazkovy eShop, tak se teste na muj login "hello'; DROP TABLE [dbo].[admin];". Predem zavrhuji namitku o pravech na objekty v databazi 8-)

Avatar

Autor komentáře: Marek Šiller

Datum vložení: 10.10.2002 16:03:30

Dobrý den,

SQL dotazy použité ve článku slouží pouze k demonstrativním účelům a jsou v nich jisté bezpečností problémy, jednak nejsou kontrolovány vstupy jednotlivých polí ani při přihlašování ani při vyplňování databázových tabulek, kde by se také dalo napáchat spoustu škod. Dalším problémem, který se týká použití uložených procedůr, je spolupráce s databází Access, která se nadá zajistit použitím uložených procedůr, protože je Access prostě nepodporuje!

Samozřejmě existuje celá řada vylepšení, které je v ukázkovém e-shopu ještě nutné provést, aby ho bylo možné použít v reálném provozu. Takovýmto úpravám se budu věnovat na konci seriálu. Prozatím jsou kódy v seriálu převážně pro demonstrativní účely, jak vypadá kostra takovéto webové aplikace.

Marek Šiller

Avatar

Autor komentáře: Andrei Badea

Datum vložení: 10.10.2002 16:11:08

Problem tohoto pristupu je, ze nefunguje. Jestlize zacatecnikum reknete: "
"tady mate priklad, ale neni uplne v poradku, jestli chcete, aby byl, tak udelejte tohle", tak se na "tohle" 90% z nich vykasle. Proc by mel slouzit k demonstrativnim ucelum pristup, ktery se v praxi vubec nepouziva (resp. nemel by)? Jestli chci nekoho neco naucit, tak bych ho naucil poradne, i kdyz je to pro nej tezsi. Jo a to, ze v Accessu SP nejsou, neberu. Jestlize uvadite kod pro vytvoreni tabulky, mohl tam byt i kod ulozene procedury.

Avatar

Autor komentáře: Vilda Kužel

Datum vložení: 11.10.2002 9:15:36

Uložené procedury jako takové v Accessu sice nejsou, ale dá se to obejít - stačí si vytvořit "dotaz" (ten Accessovskej) a ten pak volat jako uloženou proceduru. Není to sice ono, ale ne demonstraci by to mohlo stačit (analogicky k tomu Accessu ;-)

Avatar

Autor komentáře: Vladimír Suchan

Datum vložení: 11.10.2002 13:26:25

Rád bych se autora článku trochu zastal. Není úplně pravda, že tento přístup nefunguje. Problém je v tom, že komplexní kód včetně ošetření všech bezpečnostních záležitostí by byl pro začátečníka velice nepřehledný, neřku-li přímo neproniknutelný. Při výuce se musí postupovat v malých kůčcích a tento postup je z hlediska výuky správný.
Jinou otázkou je, že se na konečné fáze týkající se zabezpečení skutečně většina nováčků vykašle, ale to už je jiný problém.

Avatar

Autor komentáře: Andrei Badea

Datum vložení: 11.10.2002 13:42:04

Osetreni vetsiny bezpecnostnich zalezitosti by opravdu melo byt mezi poslednimi fazemi projektu. Ale to neznamena, ze budu psat kod, ktery neni bezpecny, s tim, ze to nekdy pozdeji dodelam, popr. upravim. I zkusenym programatorum se stava, ze na to zapomenou (nebo se na to vykaslou). Proto myslim, ze je potreba vychovat zacatecniky uz od zacatku, ze kod ma byt bezpecny. Ostatne reknete mi, jestli je takovy problem vysvetlit techto 6 radku:

set cmd = server.createobject("adodb.command")
set cmd.activeconnection = conn
cmd.commandtext = "sp_login"
cmd.commandtype = adcmdstoredproc
cmd.parameters.append cmd.createparameter("login", adchar, adparaminput, 50, request.form("login"))
cmd.parameters.append cmd.createparameter("heslo", adchar, adparaminput, 50, request.form("heslo"))

Mimochodem tenhle kod taky neni dokonaly, muze pri nevhodnem vstupu spadnout, ale nelze osetrovat uplne vse, od toho je "custom" stranka pro chybu 500-100. Ovsem bezpecnostni nedostatek to neni.

Avatar

Autor komentáře: Michal Kubeček

Datum vložení: 12.10.2002 1:38:39

Rozhodně nesouhlasím s názorem, že ošetření většiny bezpečnostních záležitostí by mělo být mezi posledními fázemi projektu. Když to tak budete dělat, můžete se spolehnout, že něco přehlédnete. Koncepce bezpečnostní politiky by měla být zpracována hned na začátku, nejlépe ještě ve fázi analýzy. V průběhu tvorby je pak třeba psát kód rovnou s ohledem na bezpečnost. Vždy je jednodušší (i časově) díru vůbec nevytvořit, než ji pak pracně látat.

Avatar

Autor komentáře: Marek Šiller

Datum vložení: 14.10.2002 14:44:52

Máte sice pravdu, ale celý kód včetně všech bezpečnostích kontrol by byl velmi složitý a nepřehledný pro začátečníky. Nevíc lze veškeré bezpečnostní díry tohoto elektronického obchodu odstranit jednou jedinou delší funkcí, jejíž kód uvedu na konci seriálu, kde budu probírat zabezpečení systému proti nechtěným operacím v databázi.

Avatar

Autor komentáře: Andrei Badea

Datum vložení: 10.10.2002 14:09:41

50znakovy login? To je plytvani mistem, navic ma ten sloupec datovy typ char, coz znamena, ze bude vzdy zabirat tech 50 bytu. Alespon pouzit varchar, nebo char(10) - to se u tak kratkeho pole hodi, protoze pristup k sloupci char je o neco malo rychlejsi nez k varchar.

Avatar

Autor komentáře: Petr

Datum vložení: 13.10.2002 23:41:07

V Accessu rozhodně nebude zabírat plnou délku, ale jen využitou, nevím jak v MSSQL, patrně z důvodů fragmentace (kde se už počítá v takových hodnotách, kolik dat se vejde na jednu paměťovou stránku) by mohl alokovat full range.

Autorovi přeji, aby se nenechal odradit a dopsal to do konce, resp. nakonec to přepsal do ASP.NET.

Je jasné, že ten kód musí být jednoduchý a dělky proměnných - to je v příkladu zcela jedno a 10 znakový login je, tedy když už do detailu, málo, když už mudrovat, pak alespoň 16 znaků a v tabulce, kde bude max. pár záznamů je to tuplem jedno.

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