تبلیغات
آموزشASP.NET - امنیت برنامه های وب ( بخش چهارم )
 
فردا روشن اسن به
آموزشASP.NET
صفحه نخست         تماس با مدیر         پست الکترونیک        RSS         ATOM
 
 
پنجشنبه 11 فروردین 1390 :: نویسنده : ارش کاکاوند

همانگونه که در بخش سوم این مقاله اشاره گردید ، به منظور استفاده از روش Forms  Authentication ، می بایست مراحل زیر را دنبال نمود :

  • مقداردهی  Authentication mode در فایل Web.config به Forms
  • ایجاد یک فرم وب به منظور اخذ اطلاعات کاربران ( Logon Page )
  • ایجاد یک فایل و یا بانک اطلاعاتی به منظور ذخیره نام و رمز عبور کاربران
  • نوشتن کد لازم به منظور افزودن کاربر جدید به فایل و یا بانک اطلاعاتی کاربران 
  • نوشتن کد لازم به منظور تائید کاربران با استناد به فایل و یا بانک اطلاعاتی کاربران

در بخش سوم این مقاله به بررسی اولین مرحله ( مقداردهی  Authentication mode در فایل Web.config به Forms  ) ، اشاره گردید . در ادامه به بررسی سایر مراحل لازم به منظور استفاده از روش Forms  Authentication ، خواهیم پرداخت .

Web.Config setting for Forms Authentication

 <authentication mode="Forms">
 
   <forms loginUrl =" Login.aspx" >
           <credentials passwordFormat = "SHA1" >
              <user name = "Srco.ir"              Password ="110" />
              <user name = "SakhaRavesh" Password ="111" />
        </credentials>
   </forms>
</authentication>

ایجاد یک فرم وب Logon
به منظور تائید کاربران بر اساس روش Forms Authentication ، نیازمند استفاده از یک فرم وب بوده که با استفاده از آن امکان Logon کاربران ، فراهم گردد. فرم وب با استفاده از عنصر <forms> در فایل Web.Config ، مشخص شده و می تواند صرفا" شامل دو Text box و یک Button  و یا شامل فیلدهای اطلاعاتی بیشتری  به منظور اخذ اطلاعات کاربران باشد .

Login.aspx

 <%@ Page Language="vb"  Codebehind="Login.aspx.vb" Inherits="Web1.Login" codePage="65001" %>
<HTML>
 <HEAD>
     <title>صفحه تائید کاربران برنامه</title>
     <meta name="vs_showGrid" content="True">
     <META http-equiv="Content-Type" content="text/html; charset=utf-8">
 </HEAD>
<BODY bgColor="#ffffff">
.   ...
 <asp:Button id="btnSingIn" runat="server" Text="Sign in"></asp:Button>
<asp:TextBox id="txtUserName" runat="server" Width="99px"></asp:TextBox>
<asp:TextBox id="txtPassword" runat="server" Width="100px" TextMode="Password"></asp:TextBox>
   ...

Login.aspx.vb
Imports System.Web.Security
Public Class Login
  ...
Private Sub btnSingIn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSingOn.Click

   If  FormsAuthentication.Authenticate(txtUserName.Text, txtPassword.Text) Then
       
 FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, True)
   Else
       txtPassword.Text = ""
       If CInt(ViewState("Tries")) >
1 Then
           Response.Redirect("Denied.htm")
       Else
           ViewState("Tries") = CInt(ViewState("Tries")) + 1
     End If
  End If
End Sub
 ...
ٍEnd Class

توضیحات

  • کلاس FormsAuthentication بخشی از namespace با نام System.Web.Security می باشد ، بنابراین می بایست با استفاده از Imports ( در ویژوال بیسک  دات نت ) آن را به برنامه Include نمائیم  ( درویژوال سی شارپ ، استفاده از  Using ) .

  • متد Authenticate مربوط به کلاس FormsAuthentication با مراجعه به لیست کاربران تعریف شده توسط عنصر<credentials> فایل Web.Config ، بررسی لازم در خصوص نام ورمز عبور کاربر را انجام می دهد.

  • متد RedirectFromLoginPage مربوط به کلاس FormsAuthentication ، صفحه شروع برنامه وب را نمایش خواهد داد.

  • در صورتیکه نام و رمز عبور کاربر معتبر نباشد ، به کاربر دو مرتبه دیگر فرصت  Logon داده خواهد شد و در صورتیکه صلاحیت کاربر تائید نگردد ، یک پیام خطاء نمایش داده می شود. صفحه گزارش خطاء از نوع HTM می باشد.( به هیچکدام از فرم های وب موجود در برنامه ، امکان دستیابی وجود نخواهد داشت ). در صورتیکه کاربر با استفاده از روش فوق به صفحه دیگر هدایت می شود ، می بایست از محل استقرار فایل فوق در محیطی خارج از حوزه برنامه مطمئن گردید .

در مثال فوق ، صفحه شروع  برنامه Webform1.aspx ( در بخش دوم این مقاله ) در نظر گرفته شده است . پس از Logon موفقیت آمیز، کاربر به صفحه فوق هدایت خواهد شد . زمانیکه کاربر بر روی دکمه sign in کلیک می نماید ، تائید کاربر بر اساس نام و رمز عبور انجام و برای وی  یک مجوز صادر خواهد شد. بدین ترتیب، کاربر امکان دستیابی به بخش های متفاوت برنامه را بدست می آورد .ماحصل اجرای صفحه فوق ، به صورت زیر است :

از کلاس FormsAuthentication به منظور Sign out ، و یا حذف کوکی Authentication از روی ماشین کاربر استفاده می گردد.کد زیر دستیابی کاربر به برنامه را خاتمه داده و استفاده مجدد از برنامه توسط وی را ملزم به  Login مجدد ، می نماید .

End User's access to an application

 Imports System.Web.Security
Private Sub butSignOut_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles butSignOut.Click
    FormsAuthentication.SignOut ( )
    Response.Redirect( "UserInfo.aspx")
End Sub

تائید کاربران با استفاده از یک بانک اطلاعاتی
در بخش قبل با  فرآیند تائید کاربران با استفاده از لیست تعریف شده کاربران موجود در فایل Web.Config ، آشنا شدیم . متد Authenticate مربوط به کلاس FormsAuthentication ، به منظور خواندن اطلاعات از فایل فوق بصورت اتوماتیک ، پیکربندی شده است . رویکردد فوق ، گزینه ای مناسب در مواردی است که مسئولیت تعریف اسامی و رمز عبور کاربران به مدیر سیستم واگذار شده باشد . در صورتیکه قصد داشته باشیم ،  امکان تعریف نام و رمز عبور را در اختیار کاربران قرار دهیم ، می بایست اطلاعات مربوط به کاربران خارج از فایل Web.config ذخیره گردد. اعمال تغییرات  در فایل Web.config  در زمان اجراء ، باعث Restart شدن برنامه شده و Reset تمامی متغیرهای Session و Application استفاده شده توسط برنامه می گردد. دراین رابطه می توان ، اسامی کاربران را در هر نوع فایلی ذخیره نمود . بدیهی است استفاده از یک بانک اطلاعاتی، مزایای خاص خود را بدنبال خواهد داشت  :

  • اسامی کاربران می تواند به عنوان کلید اولیه و به منظور ذخیره سازی سایر اطلاعات کاربران استفاده گردد .
  • بانک های اطلاعاتی دارای کارآئی مطلوب به منظور دستیابی به اسامی و رمز عبور کاربران می باشند .
  • افزودن ، تغییر و دستیابی به رکوردهای بانک اطلاعاتی  با استفاده از استانداردهای SQL انجام خواهد شد .

زمانیکه اسامی و رمز عبور کاربران در یک فایل و یا بانک اطلاعاتی ذخیره می گردد ، می توان با استفاده از متد HashPasswordeForStoringInConfigFile مربوط به کلاس FormsAuthentication ، آنان را رمز نمود. در این رابطه از الگوریتم های SHA1 و یا MD5 به منظور رمزنگاری داده استفاده می گردد :

Encrypting User names and passwords

 Password = FormsAuthentication.HashPasswordForStoringInConfigFile ( Password , "SHA1")

افزودن کاربران به یک بانک اطلاعاتی
به منظور افزودن کاربران به یک بانک اطلاعاتی ، اطلاعات مربوط به کاربران شامل نام و رمز عبور را  از طریق دو TextBox اخذ و در ادامه با ایجاد یک Event Procedure ، آنان را به بانک اطلاعاتی اضافه نموده و در نهایت پیام مناسبی که نشاندهنده درج اطلاعات کاربر در بانک اطلاعاتی سیستم می باشد ، نمایش داده خواهد شد . روتین زیر با فراخوانی تابع AddUser ،  نام و رمز عبور کاربر را به بانک اطلاعاتی اضافه می نماید .

َAdding User to a database

 Private Sub butNewUser_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles butNewUser.Click
    If AddUser(txtName.Text, txtPassword.Text) Then
          spnNote.InnerText = "کاربر جدید به بانک اطلاعاتی کاربران اضافه گردید "
    Else
          spnNote.InnerText = "کاربری با این مشخصات وجود دارد "
End If"
  End If
End Sub

تابع AddUser ، که در روتین فوق استفاده شده است ، در ابتدا رمز عبور کاربر را رمز نموده و در ادامه با استفاده از دستور SQL INSERT ، نام و رمز عبور را در بانک اطلاعاتی ذخیره می نماید .درصورتیکه رمز عبور در نظر گرفته شده توسط کاربر، قبلا" توسط کاربر دیگر تعریف و در بانک اطلاعاتی موجود باشد ، بلاک  Exeption -handling   ، خطاء را تشخیص داده و مقدار False را مبنی بر عدم افزودن اطلاعات کاربر در بانک اطلاعاتی ، برمی گرداند .

َAddUser Function

 Private Function AddUser ( Byval UserName As String , ByVal Password As String ) As Boolean
  Dim bSuccess As Boolean
  Password = FormsAuthentication.
HashPasswordForStoringInConfigFile ( Password , "SHA1")
 
Dim oleCommand As New OleDbCommand ( "INSERT INTO Users " + "Values ( '" + UserName + '" + Password + "')",oledbUsers)
  Try
      oledbUsers.Open ( )
      If oleCommand.ExecuteNonQuery ( ) Then bSuccess = True
      oledbUsers.Close ( )
  Catch
      bSuccess =False
      oledbUsers.Close ( )
  End Try
  Return bSuccess
End Function

در زمان تائید کاربران با استفاده از لیست مشخص شده کاربران در فایل  Web.Config ، از متد Authenticate استفاده می گردد.  در مواردیکه  برای تائید کاربران از بانک اطلاعاتی استفاده می گردد ، می بایست کد لازم به منظور یافتن و مقایسه نام و رمز عبور کاربران ، نوشته گردد . روتین زیر ، از تابع  CheckPassword به منظور تائید  نام و رمز عبور استفاده نموده و در صورتیکه صلاحیت کاربر تائید گردد به وی امکان دستیابی به برنامه داده خواهد شد.

َAuthenticating Users from a database

 Private Sub butSignOn_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles butSignOn.Click
   If CheckPassword(txtName.Text, txtPassword.Text) Then
         FormsAuthentication.RedirectFromLoginPage(txtName.Text, True)
    Else
         spnNote.InnerText = "نام و یا رمز عبور اشتباه است ، مجددا سعی نمائید"
         ViewState("tries") = ViewState("tries") + 1
          If   ViewState("Tries") > 3  Then
               Response.Redirect("Denied.htm")
         End If
   End If
End Sub

تابع CheckPassword ، در ابتدا رمز عبور کاربر را با استفاده از الگوریتم مشخص شده ، رمز می نماید. در ادامه ، رکورد بانک اطلاعاتی  بر اساس نام جستجو و پس از یافتن رکورد مربوطه، مقایسه بین رمز عبور رمز شده در مقابل رمز عبور موجود در بانک اطلاعاتی ، انجام خواهد شد . دستیابی به بانک اطلاعاتی از طریق یک بلاک Exception handling انجام تا پیشگیری لازم در خصوص مسئله Locking ، انجام شود .

َCheckPassword Function

 Private Function CheckPassword ( Byval UserName As String , ByVal Password As String ) As Boolean
  Dim bSuccess As Boolean
  Password = FormsAuthentication.
HashPasswordeForStoringInConfigFile ( Password , "SHA1")
 
Dim oleCommand As New OleDbCommand ( "SELECT * FROM Users" + "WHERE UserName='" + txtName.Text + "'" , oledbUsers )
  Try
      oledbUsers.Open ( )
      Dim rdrUsers As OledbDataReader = oleCommand.ExecuteReader ( )
      While rdrUsers.Read( )
            If Password =rdrUsers.Item("Password") Then bSuccess = True
      End While

      If oleCommand.ExecuteNonQuery ( ) Then bSuccess = True
      oledbUsers.Close ( )
   Catch
      bSuccess =False
      oledbUsers.Close ( )
  End Try
  Return bSuccess
End Function

تمامی کاربران با توجه به تنظیمات انجام شده  در بخش <authentication>  فایل Web.config ،  بصورت اتوماتیک به صفحه LoginBaseDb.aspx هدایت خواهند شد .

Web.Config file setting for <authentication> element

  <authentication mode="Forms">
     <forms name="Test1Cookie" loginUrl ="LoginBaseDB.aspx" timeout="15"></forms>
</authentication>

صفحه LoginBaseDb.aspx :

در صورت درج نام و رمز عبور غیرمعتبر و فشردن دکمه "ورود به سایت " توسط کاربر ، یک پیام خطاء نمایش داده می شود ( در صورت تائید نام و رمز عبور ، امکان دستیابی کاربر به برنامه فراهم می گردد) .

پس از درج  نام و رمز عبور و فشردن دکمه  " کاربر جدید " ، مشخصات کاربر در بانک اطلاعاتی کاربران ذخیره می گردد .

در بخش پنجم این مقاله به بررسی روش Passport Authentication خواهیم پرداخت .





نوع مطلب :
برچسب ها :
لینک های مرتبط :


یکشنبه 26 شهریور 1396 01:43 ق.ظ
Great blog you've got here.. It's difficult to find good quality writing like yours nowadays.

I really appreciate individuals like you! Take care!!
سه شنبه 14 شهریور 1396 12:49 ب.ظ
Unquestionably believe that which you stated. Your favorite reason appeared
to be on the web the simplest thing to be aware of.
I say to you, I definitely get irked while people think about worries that they just don't know about.

You managed to hit the nail upon the top as well as defined out
the whole thing without having side effect , people could
take a signal. Will likely be back to get more. Thanks
چهارشنبه 1 شهریور 1396 01:41 ب.ظ
It's actually a cool and useful piece of information. I'm glad that you just shared this useful information with us.
Please stay us up to date like this. Thank you for sharing.
پنجشنبه 24 فروردین 1396 04:53 ق.ظ
Appreciate the recommendation. Let me try it out.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ

سلام من آرش کاکاوند دانشجوی رشته کامپیوتر هستم و ورود شما رابه دنیای aspخوش امدمیگم.حتما نظر بدین تا من کارم رو بهتر ادامه بدم

مدیر وبلاگ : ارش کاکاوند
مطالب اخیر
نویسندگان
صفحات جانبی
نظرسنجی
شما کدام یک از برنامه های زیر را برای طراحی وب انتخاب می کنید؟








جستجو

آمار وبلاگ
کل بازدید :
بازدید امروز :
بازدید دیروز :
بازدید این ماه :
بازدید ماه قبل :
تعداد نویسندگان :
تعداد کل پست ها :
آخرین بازدید :
آخرین بروز رسانی :