Tisková verze článku  Poslat článek e-mailem  2. prosince 2007 | Radek Kropík | Komentáře (2)  

Zabezpečení ASP.NET aplikace pomocí XML

V jednom z minulých článků jsme si ukázali, jak zabezpečit webovou aplikaci pomocí tzv. Forms autentizace proti souboru web.config. V dnešním článku si představíme další možnost, a tou je Forms autentizace proti souboru XML.

Ochrana uživatelských dat

Nejprve je potřeba si vytvořit obyčejný XML soubor, nazvaný např. users.xml. Tento soubor uložíme do kořenového adresáře naší webové aplikace (tam, kde je umístěn soubor web.config). Zde pozor! Jelikož se jedná o obyčejný XML soubor, hrozí zde, že si ho může kdokoliv stáhnout a tak odhalit přihlašovací jména a hesla uživatelů. Tomu jde zabránit velice jednoduchým ale naprosto účinným trikem – u výše zmíněného XML souboru přejmenujeme příponu na config, čímž nám vznikne soubor users.config, který se samozřejmě žádnému uživateli – záškodníkovi – stáhnout nepodaří. Dalším krokem k zabezpečení uživatelských dat je jejich šifrování pomocí jednoho ze šifrovacích algoritmů a to MD5 nebo novějšího SHA1. Volbu ale nechám již na vás.

Ověřujeme zadaná data

Nyní když víme, jak XML soubor zabezpečit, navrhneme si jeho strukturu. Ta bude vcelku jednoduchá a zcela odpovídající XML standardu. Nezapomeňte, že v XML se rozlišují malá a velká písmena. V uvedené příkladu jsou kvůli jednoduchosti jména i hesla uložena v plain textu, ale doporučuji vám je šifrovat, popřípadě hashovat.

<?xml version="1.0" encoding="utf-8" ?>
 <users>
   <user>
      <name>Pavla</name>
      <heslo>heslo</heslo>
   </user> 
   <user>
      <jmeno>pavel</jmeno>
      <heslo>heslo2</heslo>
   </user>
  </users>

Dále si vytvoříme přihlašovací formulář.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>Přihlášení</title>
</head>

<body>
 <form runat="server">
  <asp:ValidationSummary ID="ValidationSummary1" 
  runat="server" ForeColor="#ff0000" DisplayMode="List"
  Visible="true" ShowSummary="true" />
  <asp:Label ID="ZpravaUzivateli" runat="server">
  Zadejte prosím své  uživatelské jméno a heslo:
  </asp:Label>        
 <table>
  <tr>
   <td><b>Jméno:</b></td>
   <td><asp:TextBox ID="Jmeno" runat="server" /></td>
   <td><asp:RequiredFieldValidator
      ID="RequiredFieldValidator1" runat="server"
      Display="Dynamic" ControlToValidate="Jmeno"
     ErrorMessage="Nebylo zadáno uživatelské jméno!"  
     Visible="true">*</asp:RequiredFieldValidator></td>
 </tr>
 <tr>
  <td><b>Heslo:</b></td>
  <td>
 <asp:TextBox ID="Heslo" runat="server"
   TextMode="Password" /></td>
   <td><asp:RequiredFieldValidator 
    ID="RequiredFieldValidator2" runat="server"      
    Display="Dynamic" ControlToValidate="Heslo" 
    ErrorMessage="Nebylo zadáno heslo!">*</ 
   asp:RequiredFieldValidator></td>
 </tr>
 <tr>
  <td colspan="3"><asp:Button ID="Odeslat" runat="server"
   Text="Přihlásit"></asp:Button></td>
   </tr>
  </table>
 </form>
</body>
</html>

A nakonec již zbývá vytvořit odpovídající proceduru, která provede vlastní ověření zadaných údajů. Jelikož ale k ukládání dat používáme XML soubor a ne např. soubor web.config, kde máme k dispozici standardní metody pro ověření zadaných dat, bude nutné si data ověřit pomocí vlastní metody. Naštěstí na tom není nic složitého, jelikož nám vlastně stačí porovnat údaje zadané ve formuláři s údaji v XML souboru.

private void Odeslat_Click(object sender, System.EventArgs e)
{
 //Nejprve načteme obsah souboru users.config do DataSetu
 DataSet dsUzivatele = new DataSet();
 FileStream fsUzivatele = new FileStream(Server.MapPath
           ("users.config"),FileMode.Open, FileAccess.Read);
 StreamReader rdUzivatele = new StreamReader(fsUzivatele);
 dsUzivatele.ReadXml(rdUzivatele);
 rdUzivatele.Close();
 rdUzivatele = null;
 fsUzivatele.Close();
 fsUzivatele = null;

 //Porovnáme záznamy
 DataTable dtUzivatele = dsUzivatele.Tables[0];
 DataRow[] matches = dtUzivatele.Select("jmeno='" +
                                              Jmeno.Text + "'");

 //Když najdeme uživatele, porovnáme hesla
 if (matches != null && matches.Length > 0)
 {
   DataRow zaznam = matches[0];
   string hesloZeSouboru = zaznam["heslo"].ToString();
   string hesloForm = Heslo.Text;

   if (string.Compare(hesloForm, hesloZeSouboru, false) == 0)
   {
     //Vše OK, přihlásíme a přesměrujeme uživatele
     FormsAuthentication.RedirectFromLoginPage(Jmeno.Text, false);
    }
    else
    {
       //Chybné jméno nebo heslo, zobrazíme hlášku
       ZpravaUzivateli.Text = "Chybné heslo!";
     }
   }
}

A tím máme vlastně autentizaci za pomoci XML souboru hotovou. Nyní je již na vás, zda pro autentizaci použijete zde popsanou metodu ověřování proti XML souboru, metodu z minulého článku, kde jsme použili soubor web.config či pro ověřování údajů použijete SQL databázi, kterou si popíšeme v některém z dalších článků.


Radek Kropík




Komentáře k článku


Příspěvky vyjadřují stanovisko čtenářů, nikoliv provozovatelů serveru a redakce nenese odpovědnost za jejich obsah.

        #1
Gravatar
Kenny

Děkuju za popis tohoto problému. Už jsem se s tím dělal dlouho a už mi to konečně funguje ;)

        #2
Gravatar
ps

Pěkně a přehledně popsáno. Z tisícovky programátorů, kteří tomu rozumí je obvykle jen 1 nebo 2, kteří to umějí také popsat.




     Komentáře k tomuto článku byly již uzavřeny.


Novinky a oznámení

19.10.11 - Nyní najdete nově u každého článku ikonu obálky. Pokud na ní kliknete, budete moci odeslat odkaz na vybraný článek na e-malovou adresu, kterou zadáte v zobrazivším se formuláři. Odpadá vám tak nutnost pro odeslání odkazu na zajímavý článek spouštět e-mailového klienta a zakládání nového e-mailu.

11.10.11 - Nově v magazínu naleznete tzv. QR kód, který obsahuje vždy adresu právě zobrazené stránky. Pokud máte zobrazenou některou z kategorií článků, obsahuje QR kód adresu této kategorie, pokud máte zobrazený článek, QR kód obsahuje adresu zobrazeného článku, v ostatních případech obsahuje QR kód hlavní adresu magazínu.

23.09.11 - V neděli 25.9.2011 v době mezi 1:00 a 5:00 hod. proběhl přesun služeb serveru na nový hardware. Za nedostupnost magazínu v době přesunu se vám omlouváme.


QR kód článku

QR kód článku

Aktualizace e-mailem

Nechcete, aby vám unikl nový článek? Není nic jednoduššího, než se zaregistrovat a kdykoliv vyjde v magazínu nový článek, dáme vám vědět e-mailem.




Ikonka pro Vás

Líbí se vám tento magazín a rádi byste ho nějak podpořili? Pokud máte své webové stránky, budeme vám vděčni, pokud si na ně přidáte naší ikonku. Stačí přidat na váš web HTML kód, kderý najdete zde.


Partnerské weby


Naši fanoušci na Facebooku


Statistika


Reklama