روش های کنترل دستيابی کاربران به برنامه های وب دات نت New Page 1



ساير




 

 

 

SAKHA RAVESH CO.

 ا مروز

 چهارشنبه  6  ارديبهشت  1396  2017  Apr.  26   Wendesday ToDay
صفحه اصلی  مقالات نکته هادايره المعارف خودآموزها | تازه ها خود آزمون ها    
  نسخه قابل چاپ  

    5 4 3 2 1 

 عنوان

 نويسنده

  مشاهده

 تعداد آراء

 امتياز

 امنيت برنامه های وب ( بخش چهارم )

 مديريت وب

13092

10

4.2

با توجه به جایگاه داده در عصر حاضر و  لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر  روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و  خدمات خود  را از طریق  سایت www.fabak.ir  به مخاطبان محترم عرضه می نماید

 

امنيت برنامه های وب ( بخش چهارم )

امنيت برنامه های وب ( بخش چهارم )

 آنچه تاکنون گفته شده است :

همانگونه که در بخش سوم اين مقاله اشاره گرديد ، به منظور استفاده از روش 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 خواهيم پرداخت .



جستجو

مقالات                 
دايره المعارف       
دوره های آموزشی


 

 

مشاهده گروه ها



              

 

 تهيه شده در شرکت سخا روش -  1382