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.

Žádný příspěvek v diskuzi

Odpovědět