عنوان
|
نويسنده
|
مشاهده
|
تعداد
آراء |
امتياز
|
امنيت برنامه های وب ( بخش چهارم ) |
مديريت وب |
14871 |
10 |
4.2 |
با توجه به جایگاه داده در عصر حاضر و لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و خدمات خود را از طریق سایت www.fabak.ir به مخاطبان محترم عرضه می نماید
 |
امنيت برنامه های وب ( بخش چهارم )
امنيت برنامه های وب ( بخش
چهارم )
آنچه
تاکنون گفته شده است :
|
-
بخش اول
: مفاهيم اوليه و روش های متفاوت تائيد کاربران
-
بخش دوم : بررسی
Windows Authentication
- بخش سوم : بررسی
Forms Authentication
|
همانگونه که در بخش سوم اين مقاله اشاره گرديد ، به منظور استفاده از روش
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 خواهيم پرداخت .