70-562: Securing Your Site

Artykuł pochodzi w serii przygotowań do egzaminu 70-562 ASP.NET.

Do tej pory powiedzieliśmy sobie o profilach użytkowników, narzędziu WSAT, kontrolce Login czy też o podstawach membershipa. ASP.NET wspiera co najmniej 4 rodzaje uwierzytelniania są to:

  • Windows authentication
  • Forms authentication (which ASP.NET membership uses)
  • Passport authentication
  • Anonymous access

Dzisiaj porozmawiamy w sposób ogólny jak można wykorzystać każdy z tych sposobów.

Konfiguracja aplikacji webowej która wymaga uwierzytelnienia poprzez Windows authentication

Jeśli aplikacja będzie wykorzystywana typowo wewnątrz firmy w której użytkownicy mają swoją konta które są w bazie lub jest cały Active Direcotry to wskazane jest korzystanie właśnie z Windows authentication. Możesz skonfigurować uwierzytelnianie Windows na dwa sposoby: w IIS oraz w aplikacji ASP.NET. Jeśli chcemy się ekstra zabezpieczyć to korzystamy z dwóch na raz. Kiedy aplikacja internetowa wymaga uwierzytelniania systemu Windows, aplikacja odrzuca wniosek, który nie zawiera prawidłowej nazwy użytkownika i hasła w nagłówku żądania. Niektóre przeglądarki np. IE ;) automatycznie dostarczają aktualną nazwę oraz hasło użytkownika który jest obecnie w intranecie. Nie trzeba chyba mówić, że to usprawnia prace i pozwala się płynnie uwierzytelniać użytkownikowi podczas każdych odwiedzin.

Dodatkowo, ponieważ użytkownicy są uwierzytelniani przez serwer w lokalnej bazie danych użytkownika lub
Domeny Active Directory, przy użyciu uwierzytelniania systemu Windows pozwala to uniknąć tworzenia bazy danych do przechowywania poświadczenia użytkownika. Także można stwierdzić, że Windows authentication jest najprostszym ze sposobów uwierzytelniania.

Aby dodać w prosty sposób Windows authentication do naszej aplikacji webowe w pliku web.config musimy umieścić sekcje <authentication> :

   1: <configuration>
   2: <system.web>
   3:     <authentication mode="Windows" />
   4:         <authorization>
   5:                 <deny users="?" />
   6:        </authorization>
   7: </system.web>
   8: </configuration>

 

Jeśli mamy jakiś formularz w który mielibyśmy możliwość wpisania loginu i hasła. Powiedzmy, że zrobiliśmy taki formularz i jest on na stornie Login.aspx. Musimy tam odesłać każdego niezalogowanego użytkownika ze storn do których nie ma dostępu. Aby to zrobić umieszczamy sekcje w web.config:

   1: <configuration>
   2:     <system.web>
   3:             <authentication mode="Forms">
   4:                 <forms loginURL="Login.aspx" />
   5:             </authentication>
   6:            <authorization>
   7:                <deny users="?" />
   8:            </authentication>
   9:     </system.web>
  10: </configuration>

Na stornie Login.aspx oczywiście musimy sprawdzić poprawność wprowadzonych danych. Aby to zrobić wystarczy prosty kod:

   1: if (FormsAuthentication.Authenticate(username.Text,
   2: password.Text))
   3: {
   4: //user is authenticated. Redirect user to the page requested.
   5: FormsAuthentication.RedirectFromLoginPage(usernameTextBox.Text, false);
   6: }

False oznacza, że dane nie będą pamiętane w ciasteczku stąd po wyłączeniu przeglądarki na nowo będziemy musieli się zalogować.

Jest możliwość skonfigurowania konta użytkownika wewnątrz web.config jeśli nie chcemy trzymać tych danych np. w bazie. Są trzy możliwości przechowywania hasła takiego użytkownika: jawny tekst, MD5 lub SHA1. Pozwala to uniknąć kradzieży konta przez użytkownika który ma dostęp do naszego pliku web.config. Spójrzmy jak przykładowo wygląda to właśnie w pliku web.config :

   1: <authentication mode="Forms">
   2:     <forms loginUrl="login.aspx" protection="Encryption" timeout="30" >
   3:         <credentials passwordFormat="SHA1" >
   4:             <user name="Eric" password="07B7F3EE06F278DB966BE960E7CBBD103DF30CA6"/>
   5:             <user name="Sam" password="5753A498F025464D72E088A9D5D6E872592D5F91"/>
   6:         </credentials>
   7:     </forms>
   8: </authentication>

Jednak aby pozwolić nam na korzystanie z takich zakodowanych haseł musimy mieć możliwość ich stworzenia. Przydałaby się program który by kodował hasło które później moglibyśmy używać w web.configu . Do tego celu możemy wykorzystać przestrzeń nazw System.Security.Cryptography. Spójrzmy na przykładowy kod generowania hash’a.

   1: namespace HashExample
   2: {
   3: class Program
   4: {
   5: static void Main(string[] args)
   6: {
   7: SHA1CryptoServiceProvider myHash=new SHA1CryptoServiceProvider();
   8: byte[] password = Encoding.ASCII.GetBytes(args[0]);
   9: myHash.ComputeHash(password);
  10: foreach (byte thisByte in myHash.Hash)
  11: Console.Write(thisByte.ToString("X2"));
  12: Console.WriteLine();
  13: }
  14: }
  15: }

 

Uwierzytelnianie za pomocą Paszportów

Można korzystać z usługi paszportów oferowaną przez Microsoft. Paszport pozwala odpłatnie korzystać z zcentralizowanej bazy danych. Przechowywanie danych o użytkownikach w ramach tej usługi uwalnia ich od tworzenia nowych profili, pamiętania kolejnego hasła do kolejnej witryny itd. Jest to również zaoszczędzenie czasu i co tu ukrywać przyjemne dla naszego odbiorcy.

Konfigurowanie aplikacji dla anonimowych użytkowników

Możemy wyraźniej wyłączyć autoryzowanie użytkowników w naszej aplikacji. Jednak zaleca się aby wtedy korzystać z IIS. Aby to zrobić wystarczy następująca sekcja w web.config:

   1: <configuration>
   2:     <system.web>
   3:         <authentication mode="None" />
   4:     </system.web>
   5: </configuration>

Możemy ograniczyć dostęp do poszczególnych folderów, plików naszej aplikacji na podstawie np. grupy czy konkretnych użytkowników. Domyślnie machine.config zawiera:

   1: <authorization>
   2: <allow users="*"/>
   3: </authorization>

Sekcja ta pozwala na dostęp wszystkim użytkownikom. Jeśli chcielibyśmy ograniczyć dostęp do poszczególnych użytkowników należałoby zastosować tą przykładowa sekcje:

   1: <authorization>
   2:     <allow users="Eric, Sam"/>
   3:     <deny users="*"/>
   4: </authorization>

 

Sekcja ta jednak ogranicza nam dostęp dla całej aplikacji. Jeśli chcielibyśmy użyć ograniczeń do konkretnej strony wyglądałoby to następująco:

   1: <location path="ListUsers.aspx">
   2:     <system.web>
   3:         <authentication mode="forms">
   4:             <forms loginUrl="AdminLogin.aspx" protection="All"/>
   5:         </authentication>
   6: <authorization>
   7:     <allow users="admin"/>
   8:         <deny users="*"/>
   9: </authorization>
  10: </system.web>
  11: </location>

 

To tyle na dzisiaj. Miłej zabawy na Kortowiadzie ;)

Tagi: , , ,

Add comment




  Country flag
biuquote
  • Comment
  • Preview
Loading


Eastgroup.pl na facebooku