Zabezpečení ASP.NET aplikace pomocí XML

2. prosince 2007 | Radek Kropík | Komentáře (2)

Tisk

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

Počet komentářů: 2

Vložené příspěvky vyjadřují názory svých autorů a redakce neodpovídá za jejich obsah.

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

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.





V komentářích není povoleno HTML a bude před odesláním formuláře odstraněno. Všechny URL začínající na 'http://' a e-mailové adresy budou převedeny na odkazy. Nový odstavec můžete vytvořit stejně jako v textovém editoru pomocí klávesy Enter.
Redakce si vyhrazuje právo smazat příspěvky, které jsou vulgární nebo by mohly jakkoliv poškodit tento magazín! Nezapoměňte správně opsat kontrolní kód!




(nebude zveřejněn, slouží k načtení Gravataru)






Kontrolní kód



 

Novinky v magazínu

9.02.10 - Vaše články
Nenašli jste v magazínu článek o něčem, co vás skutečně zajímá? Není nic jednoduššího, než nám napsat váš návrh. Pokud nás váš návrh o čem napsat opravdu zaujme, může se brzy v magazínu objevit článek právě na vámi navrhnuté téma.

Vyhledávání




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


Statistika



Partnerské weby


Reklama