Jak zabezpečit aplikaci v ASP.NET – autentizace pomocí XML souboru
V předchozím článku o zabezpečení web aplikací v ASP.NET jsme používali jako ověřovací soubor web.config a ověření jsme provedli pomocí standardních funkcí. Dnes si ukážeme, jak provést ověření proti souboru XML a současně vám ukáži malý trik, jak zamezit stažení tohoto souboru návštěvníkem.
Jak ochránit soubor s daty uživatelů
Jako ideální řešení se jeví umístit xml soubor se jmény a hesly mimo kořen webu, což však může být na některých serverech poskytující webhosting problém. Když však soubor s daty uživatelů umístíte do kořene webu, není problém si tento soubor pro případného nenechavce stáhnout. Můžete si to nyní zkusit i sami. Jde však o poněkud nepříjemnou díru do systému, a to i přesto, že jsou hesla šifrována. Mám pro vás jednoduché řešení, kterým snadno a rychle tento problém vyřešíte. Stačí soubor uzivatel.xml přejmenovat na soubor uživatel.config a je po problému. Výsledek si máte možnost zkusit.
Pokud se rozhodnete údaje o uživatelích v souboru šifrovat, můžete k tomu s úspěchem použít utilitu prezentovanou v minulém článku. Ať už se rozhodnete data šifrovat či nikoli, měli byste mít v xml souboru buď hesla jen nešifrovaná a nebo šifrovaná pouze jedním algoritmem (buď MD5 nebo SHA1).
Navržená struktura souboru xml s daty uživatelů umožňuje přidávat ke každému uživateli další informace (například přístupová práva nebo čas posledního přihlašení). Pro úplnost dodám, že hesla jsou zašifrována algoritmem SHA1 a použil jsem k tomu jednoduché „udělátko“ z přechozího článku. Nezapomeňte si u souboru změnit příponu na config, čímž zabráníte stažení tohoto souboru (v příkladu mám pro účely demonstrace oba dva).
Uživatel OKO má heslo ok. Pozor, při vkládání jména i hesla se rozlišují malá a velká písmena.
Vzhled formuláře použijeme z druhého dílu tohoto seriálu, budeme tedy pouze měnit kód v souboru login.aspx.cs. Po provedení změn ovšem nesmíte zapomenout celou aplikaci znovu přeložit.
Při ověřování pomocí souboru web.config jsme použili standardní metodu. Bohužel pro způsob ověření, který právě teď realizujeme, nemáme k dispozici žádnou standardní metodu pro zjištění, zda uživatele opravňují k přístupu do aplikace data, která zadal.
Proto si ověření zadaných dat musíme provést sami. Stačí pouze porovnat data vložená uživatelem s daty, která jsou v XML souboru.
Postup celého ověření lze nastínit těmito body
- načíst XML soubor
- najít záznam pro zadané uživatelské jméno
- zašifrovat zadané heslo zvoleným algoritmem
- porovnat zašifrované zadané heslo s heslem ze souboru
- a pokud jsou stejné, provést přihlášení stejně, jako v minulém článku.
Pro zpracování souboru s daty uživatelů je použit objekt DataSet, se kterým se budete při tvorbě aplikací v .NET setkávat velice často.
Pokud vás zajímají podrobnosti o tomto objektu, dovolím si vás prozatím odkázat na dokumentaci.
private void prihlasit_Click(object sender, System.EventArgs e)
{
/*
* Vytvoření instance objektu DataSet naplnění obsahem souboru
* uzivatel.config
*/
DataSet ds=new DataSet();
FileStream fs = new FileStream(Server.MapPath(„uzivatel.config“),FileMode.Open,FileAccess.Read);
StreamReader reader= new StreamReader(fs);
ds.ReadXml(reader); // načtení souboru do DataSetu
// zrušení objektů pro práci s XML souborem
reader.Close();
reader=null;
fs.Close();
fs=null;
// výběr přísluného záznamu z DataSetu
DataTable users =ds.Tables[0];
DataRow[] matches = users.Select(„jmeno='“+strJmeno.Text+“‚“);
if (matches !=null && matches.Length>0) // otestování, zda se nějaký zaznam našel
{
DataRow zaznam= matches[0]; // vezmeme si hned první záznam
// příprava hesel pro porovnání
string heslozdatabaze= zaznam[„heslo“].ToString();
string zadanehesloHash= FormsAuthentication.HashPasswordForStoringInConfigFile(strHeslo.Text,“SHA1″);
if (string.Compare(zadanehesloHash,heslozdatabaze,false)==0) // porovnání hesel
{
// hesla se shodují, dokončíme přihlášení
FormsAuthentication.RedirectFromLoginPage(strJmeno.Text, true);
}
}
}
V kódu se zabývám jen prvním nalezeným záznamem o uživateli. Předpokládám totiž, že je každé jméno uživatele unikátní. Aplikace pro správu uživatelů, která bude následovat v dalším článku s tímto bude počítat.
Možná se zarazíte, proč při ověřování hesla šifruji heslo, které zadal uživatel. Pokud bych postavil algoritmus tak, že se bude dešifrovat údaj uložený v souboru, narazíme na velký problém, výsledku ověření bychom se totiž pravděpodobně hned tak nedočkali.
Fungující aplikaci si máte možnost prohlédnout a její zdrojové kódy jsou také k dispozici. Po úspěšném přihlášení se vám zobrazí stránka s možností odhlásit a současně je na této stránce uveden výpis souboru, proti kterému se provádí ověřování.
Tím jsme vyřešili kompletně ověřování uživatele v XML souboru. Jistě však uznáte, že vkládat data do souboru ručně by bylo velice pracné a proto bude lepší si vytvořit rozhraní, které umožní pohodlnou editaci a správu účtů v systému. Na to, jak takovéto rozhraní vytvořit si však budete muset pár dní počkat.
Mohlo by vás také zajímat
-
Jak zabezpečit váš chytrý telefon před kybernetickými hrozbami
30. listopadu 2023 -
Monitory OLED: klíčové pojmy a funkce
13. května 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024