02.12.2007 | Radek | | Programujeme | Žádné komentáře | 

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





Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *


Novinky a oznámení

15.10.2016 - Do menu byla přidána nová sekce Stream, kde naleznete jak veškěré informace ohledně Fantomasmag TV, což jsou online streamy na Twitch.tv, tak i přímo online stream a chat.

Partnerské weby

Statistika

Naši fanoušci na Facebooku

Další...