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

Jak zabezpečit ASP.NET aplikaci

Mnoho webových aplikací nevyžaduje od uživatele žádné prokázání své identity. V takovém případě se jedná o tzv. anonymní přístup ke všem stránkám takovéto aplikace. Existují ale aplikace, které mají tzv. privátní zónu s jestliže chce uživatel přistupovat i k informacím v této privátní zóně, musí nějakým způsobem prokázat, že se jedná o uživatele oprávněného tyto informace získat. A v tuto chvíli vstupuje do hry proces nazývaný autorizace a autentizace. Nejdříve se vysvětlíme, co tyto dva pojmy znamenají:

Autentizace (Authentication)

Toto na první pohled tajemné slovo znamená vlastně proces, který slouží ke zjištění a ověření identity uživatele. Uživatel musí nějakým způsobem dokázat, že má oprávnění přistupovat do zabezpečení části aplikace a to pomocí uživatelského jména a hesla. Výsledkem je umožnění popřípadě zamítnutí přístupu k zabezpečené části aplikace.

Autorizace (Authorization)

Při autorizaci dochází k ověření, zda autentizovaný uživatel má oprávnění k přístupu k informacím, které požaduje. Pokud je ověření kladné, je mu přístup k těmto informacím povolen, v opačném případě zamítnut.

V .NETu můžete pro autentizaci použít 4 různé režimy a to None, Windows, Forms, Passport. To, jaký režim se použije se řídí podle nastavení v souboru web.config. Je jasné, že při režimu None k žádné autentizaci nedochází. Při režimu Windows provádí autentizaci přímo server IIS a používá se ho většinou v sítích typu intranet, kde lze snadno nastavovat oprávnění přímo v IIS. Při použití režimu Passport provádí ověření identity služba MS Passport, čehož se využívá pouze zřídka. Nejčastěji používaným režimem při tvorbě webových aplikací je režim Forms. Při tomto režimu máte při tvorbě autentizace volné ruce a je jen na vás, proti jakému zdroji dat provedete ověření uživatele. Data o uživatelích můžete mít uložena např. v databázi MS SQL Server nebo v souboru web.config. Jaké úložiště použijete záleží opravdu jen na vás. My si v tomto článku ukážeme, jak provádět autentizaci proti datům uloženým v souboru web.config.

Soubor web.config se nachází v kořenovém adresáři ASP.NET aplikace a mimo to, že slouží např. k nastavování konfiguračních parametrů, jako je řetězec sloužící k připojení na databázi apod., může sloužit také k uložení informací o uživatelích, sloužících k autentizaci. Nejprve je nutno vytvořit sekci authentication a jelikož budeme používat režim Forms, také vnořenou sekci forms.

<authentication mode="Forms">
  <forms name=".ASPXAUTH" loginUrl="Login.aspx"
       defaultUrl="Admin/Default.aspx" timeout=“30“>
     <credentials passwordFormat="Clear">
       <user name="jmeno" password="heslo" />
     </credentials>
  </forms>
</authentication>

Je zde použito několik parametrů. První parametr name slouží k zadání jména tzv. autentizační cookie. Pokud se vynechá, je použito výchozí hodnoty .ASPXAUTH. Pokud tento parametr použijete, doporučuji zadávat nějaká složitější a delší jména, aby nedošlo ke kolizi s autentizační cookie jiné webové aplikace, která by používala stejné jméno. Parametr loginUrl určuje adresu, na kterou bude uživatel přesměrován, pokud není autentizován. V parametru defaultUrl se uvádí adresa, na kterou bude uživatel přesměrován po úspěšné autentizaci. A konečně parametr timeout určuje v minutách dobu, po kterou je autentizace platná. Po vypršení této doby se odstraní autentizační cookie a musíte se znovu přihlásit.

Pro uložení uživatelského jména a hesla je použito sekce credentials. Zde použitý parametr passwordFormat slouží ke zvolení způsobu, v jakém tvaru bude uloženo heslo. Možnosti jsou Clear – čistá textová forma hesla, SHA1 a MD5 – heslo je uloženo v zašifrovaném tvaru pomocí jednoho z těchto dvou algoritmů. Je jen na vás, který z nich si zvolíte. Samotná uživatelská jména a hesla se zapisují do sekce user, kde v parametru name se uvede uživatelské jméno a v parametru password analogicky uživatelovo heslo.

No a nakonec musíme soubor web.config doplnit o sekci authorization, ve které zakážeme přístup neautorizovaným uživatelům. Dejme tomu, že jsme si v rootu aplikace vytvořili složku Admin, do které má mít přístup pouze omezený počet uživatelů. Toto omezení učiníme následovně:

<location path="Admin">
  <system.web>
    <authorization>
      <deny users="?" />
    </authorization>
  </system.web>
</location>

Naší další prací bude vytvoření přihlašovacího formuláře Login.aspx

<!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 také musíme ošetřit událost po kliknutí na tlačítko Přihlásit

Private Sub Odeslat_Click(ByVal sender As Object,ByVal e As
                           EventArgs) Handles Odeslat.Click
   If FormsAuthentication.Authenticate(Me.Jmeno.Text,
                                        Me.Heslo.Text) Then
     FormsAuthentication.RedirectFromLoginPage
                                      (Me.Jmeno.Text,false)
  Else
    Me.ZpravaUzivateli.Text = "Chybné jméno nebo heslo!“
  End If
End Sub

V tomto případě je použito metody RedirectFromLoginPage() z namaspace System.Web.Security, Tato metoda má dva parametry. První z nich je Uživatelské jméno autentizovaného uživatele, druhý udává, zda bude cookie tzv. persistentní či nikoliv. Pokud zadáme jako hodnotu tohoto parametru true, bude cookie platit stále, dokonce i po ukončení prohlížeče a to až do řádného odhlášení pomocí metody FormsAuthentication.SignOut() z namaspace System.Web.Security. Pokud bude mít hodnotu false, cookie bude platná po dobu nastavenou v souboru web.config v parametru timeout nebo do ukončení prohlížeče.

V tomto stavu by vám již měla autentizace i autorizace spolehlivě fungovat. V některém z dalších článků se jistě k zabezpečení ASP.NET aplikací ještě vrátíme, jelikož toto téma obsahuje mnoho zajímavých a užitečných věcí


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
ps

Jak je ale možno zablokovat přístup k obsahu (souborům) celého adresáře?

        #2
Gravatar
Fantomasmag

ps: Celý adresář lze zablokovat velice jednoduše, jak je popsáno výše, a to v souboru web.config. Tak je to uděláno např. i u tohoto magazínu a pokud se pokusíte přistoupit na adresu www.fantomasmag.net/Files/Other/ dostanete chybovou hlášku 403 - Access denied.

        #3
Gravatar
ps

Pokud ale bude v tomto adresáři např. JPG nebo XML soubor, jehož název budu znát a zadám kompletní adresu, pak jej prohlížeč normálně otevře bez toho, že by mne přesměroval na login.aspx.

Proč?

        #4
Gravatar
Maribeth

Your asnewr was just what I needed. It’s made my day!




     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