ورود

View Full Version : ايجاد يك سيستم كلمه عبور ساده



دکمه64
پنج شنبه 21 آذر 1387, 14:49 عصر
ايجاد يك سيستم Login برای ورود اعضاء يك سايت

امروزه اغلب سايتهايی را كه مشاهده می كنيد معمولا دارای يك سيستم Login هستند كه بوسيله يك شناسه كاربری (UserID) و يك كلمه عبور (Password)، قادر به تشخيص افراد خاصی از ميان تمام مراجعه كنندگان به سايت هستند.
يك نمونه بارز آن صفحه SignIn سايت معروف Yahoo! برای ورود به پست الكترونيك كاربران است كه ياهو پس از بررسی وجود شناسه كاربری و صحت كلمه عبور وارد شده، به كاربران اجازه ورود به صندوق پستی خود را می دهد.
در اين مقاله سعی شده است با ساخت يك برنامه ساده Login توضيحاتی درباره ساختار و نحوه كار آنها بيان نماييم :
قبل از هر چيز ما نياز به ساختن يك بانك اطلاعاتی برای ذخيره كردن اطلاعات كاربران سايت داريم. اين بانك اطلاعاتی می تواند بوسيله برنامه های مختلفی از جمله Access ساخته شود. بانك اطلاعاتی مورد نياز برای اين برنامه شامل يك جدول بنام Members و دو ستون به نامهای UserID وPassword برای ذخيره اطلاعات كاربران است.
همچنين دستور SQL برای ساختن اين جدول در صفحات ASP بصورت زير است:
Create Table Members (
UserID(20)
Password(15)
)

پس از ساختن اين بانك اطلاعاتی نياز به ساخت يك فرم ساده برای دريافت اطلاعات كاربران داريم كه آنرا در داخل صفحه ای بنام Login.htm می سازيم.
اين صفحه به سادگی و بوسيله دستورات مقدماتی HTML قابل تهيه است.
<HTML>
<HEAD><TITLE>Login</TITLE></HEAD>
<BODY>
<TABLE cellSpacing="0" cellPadding="0" border="0" width="300" align="center">
<TR><TD align="center" Colspan="2"><H2>Login Members</H2></TD></TR>
<TR Height="35">
<TD align="right" Width="100">
<FORM Method="post" Action="Login_Action.asp">
UserID&nbsp;:&nbsp;
</TD>
<TD align="Left">
<INPUT type="text" name="UserID" Size="20">
</TD>
</TR>
<TR Height="35">
<TD align="right">
Password&nbsp;:&nbsp;
</TD>
<TD align="left">
<INPUT type="Password" name="Password" Size="20">
</TD>
</TR>
<TR Height="35"><TD align="center" Colspan="2">
<INPUT type="Submit" name="Submit" value="Login">
</TD></TR>
</TABLE>
</FORM>
</BODY>
</HTML>
در كد بالا چند نكته قابل توجه وجود دارد :
Form method=Post: نحوه ارسال اطلاعات فرم را مشخص می كند. بدين صورت كه اگر ما بخواهيم اطلاعات دريافتی از يك كاربر را به صفحه ديگری برای پردازش ارسال كنيم، بايد از اين متد، يعنی متد Post استفاده كنيم. اطلاعاتی كه بوسيله متد Post ارسال می شوند، در صفحه بعدی بوسيله شئ Request و بصورت زير قابل بازيابی هستند.
Request.Form("fieldname")

Action=Login_Action.asp: مقداری كه در مقابل ويژگی Action در دستور Form قرار گرفته، نام فايلی است كه اطلاعات فرم پس از دريافت از كاربر، به آن صفحه ارسال می شود.
ويژگی Name در دستور Input: نام متغيری است كه كلمه ورودی كاربر در فيلد جاری در آن ذخيره می شود. هر كلمه ای كه كاربر در يك فيلد وارد می كند در صفحه مقصد بوسيله نامی كه برای آن فيلد تعيين شده قابل دسترسی است.
پس از ساخت بانك اطلاعاتی و يك فرم ساده برای دريافت اطلاعات كاربران، نوبت به ساخت صفحه ای برای پردازش و پاسخ متقابل به اطلاعات ورودی كاربران است. اين صفحه را با نام Login_Action.asp می سازيم.
<%@Language="VBScript"%>
<%
User = Request.Form("UserID")
Pass = Request.Form("Password")
Set AdoCon = Server.CreateObject("ADODB.Connection")
StrCon = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("Users.mdb")
AdoCon.Open StrCon
Set AdoRec = Server.CreateObject("ADODB.Recordset")
StrSQL = "SELECT * FROM Members WHERE UserID ='" & User & "'"
AdoRec.Open StrSQL, StrCon
IF NOT AdoRec.EOF Then
IF Pass = Trim(AdoRec("Password")) Then
Response.Write ("Welcome " & User)
Else
Response.Write ("Invalid Password")
End IF
Else
Response.Write ("Invalid UserID")
End IF
Set AdoCon = Nothing
Set StrCon = Nothing
Set AdoRec = Nothing
%>
اطلاعات ورودی كاربر در صفحه Login.htm پس از فشردن دكمه Login به صفحه Login_Action.asp ارسال می شوند.
ابتدا ما بايد اطلاعات فرم را از صفحه اصلی، داخل صفحه جاری بازيابی كنيم اين كار بوسيله شئ Request انجام پذير است. پس از بازيابی اطلاعات، آنها را درون دو متغير به نام های User و Pass برای استفاده های بعدی ذخيره می كنيم. سپس بوسيله شئ Connection با بانك اطلاعاتی ارتباط برقرار می كنيم. متد Open از شئ Connection آغاز ارتباط با بانك اطلاعاتی است. هميشه برای هرگونه دستيابی به بانك اطلاعاتی بايد بوسيله اين متد، ارتباط را با بانك اطلاعاتی را باز كنيم.
پس از شروع ارتباط با بانك اطلاعاتی حال ما نياز به يك پرس و جو از بانك اطلاعاتی داريم. اين كار بوسيله شئ RecordSet انجام پذير است. سپس بوسيله متد Open از شئ RecordSet پرس و جو از بانك اطلاعاتی را آغاز می كنيم.
همانطور كه در كد موجود در قسمت اول اين مقاله مشاهده می كنيد دستور AdoRec.Open شامل دو مقدار است.
StrSQL : نام متغيری است كه حاوی دستور SQL برای پرس و جو از بانك اطلاعاتی است.
StrCon : مشخص كننده درايور و محل دقيق فايل بانك اطلاعاتی ماست (لازم به ذكر است كه ما دراينجا از يك ارتباط Dsn_Less استفاده كرديم).
ساختار اصلی هر برنامه Login معمولا بصورت زير است :
در برنامه Login ما ابتدا بايد شناسه كاربری يك فرد را كه در داخل فرم وارد كرده است، دريافت كرده و همانند آنرا داخل بانك اطلاعاتی كاربران بيابيم. در صورت وجود شناسه كاربری، كلمه عبور مربوط به آن كاربر را از بانك اطلاعاتی بازيابی می كنيم. سپس كلمه عبوری را كه كاربر در داخل فرم تايپ كرده با كلمه عبوری كه از بانك اطلاعاتی بازيابی كرده ايم مقايسه می كنيم در صورت صحيح بودن كلمه عبور، عمليات Login موفقيت آميز خواهد بود. در غير اينصورت پيغام های خطايی مطابق با خطاهايی كه پيش آمده به نمايش در خواهد آمد.
در دستورات شرطی داخل كد بالا چند نكته وجود دارد كه بترتيب به بررسی آنها می پردازيم :
در اولين دستور شرطی متد EOF از شئ RecordSet به معنی پايان يك بانك اطلاعاتی است (همچنين متد BOF نمايانگر ابتدای يك بانك اطلاعاتی است) و واژه NOT هم، شرط جاری را منفی می كند. پس در شرط اول ما بيان كرديم كه اگر طبق دستور SQL پرس و جو در بانك اطلاعاتی به پايان بانك نرسيده باشد يعنی قبلا از رسيدن به پايان بانك اطلاعاتی، شئ RecordSet يك سطر از بانك اطلاعاتی را مطابق نظر ما يافته باشد(شناسه كاربری وارد شده در فرم معتبر باشد)، شرط بعدی اجرا خواهد شد.
در صورتيكه اين شرط برقرار نباشد مرورگر پيغام خطايی مبنی بر اينكه شناسه كاربری وارد شده صحيح نمی باشد را نمايش می دهد. بدين معنی كه شناسه كاربری وارد شده در داخل فرم، در بانك اطلاعاتی يافت نشده است.
اما اگر اين شرط برقرار باشد، شرط ديگری برای بررسی كلمه عبور، بيان می كنيم.
متغير Pass حاوی كلمه عبور وارد شده توسط كاربر، در داخل فرم است و دستور AdoRec(Password) حاوی كلمه عبور اصلی است كه از بانك اطلاعاتی بازيابی شده است. (كلمه Password در دستور فوق، نام ستون مورد نظر در بانك اطلاعاتی است)
واژه Trim قبل از دستور AdoRec(Password) تمام فاصله های خالی قبل و بعد از كلمه عبور داخل بانك اطلاعاتی را حذف می كند و فقط كلمه عبور را بازيابی می كند.
مثلا اگر در هنگام ساختن بانك اطلاعاتی خود، ستون Password را با حد اكثر 15 كاراكتر ساخته باشيد و كلمه Test را به عنوان كلمه عبور خود قرارداده باشيم، هنگام بازيابی اين كلمه از بانك اطلاعاتی ما يك رشته با طول 15 كاراكتر داريم كه 11 كاراكتر آخر آن خالی است. بوسيله واژه Trim می توان اين فواصل خالی را حذف كرد.
حال در صورت برقراری اين شرط يعنی اگر كلمه عبور وارد شده كاربر با كلمه عبور داخل بانك اطلاعاتی مطابقت كند، يك پيغام خوش آمد گويی حاوی نام كاربر روی نمايشگر ظاهر خواهد شد. اما اگر اين شرط برقرار نباشد يعنی شناسه كاربری معتبر باشد اما كلمه عبور درست نباشد پيغام خطايی مبنی بر اينكه كلمه عبور صحيح نيست روی صفحه نمايشگر پديد می آيد.
در آخر نيز بايد توجه داشته باشيد كه تمام اشيايی كه داخل كد بالا استفاده كرده ايد را خالی كنيد و تمام آنها را برابر با Nothing قرار دهيد.
در پايان نيز بجاست كه مطالب اندكی راجع به حفاظت اطلاعات در صفحات سايت بيان نماييم.
شما بايد هميشه بخاطر داشته باشيد كه ارسال اطلاعات در داخل اين شبكه عظيم، هيچگاه امن و خالی از خطر نيست. خطراتی از قبيل دسترسی هكرها به اطلاعات شخصی شما و يا گم شدن اطلاعات شخصی در داخل شبكه هنگام ارسال آنها به مقصد و... هميشه اطلاعات شما را تهديد می كنند.
چون اين اطلاعات ارسالی در بين راه از موانع زياد و از داخل شبكه های بسياری تا رسيدن به مقصد عبور می كند و اين راه در داخل اين شبكه ها هيچگاه كاملا امن نيست.
داده های ارسالی شما حتی پس از رسيدن به مقصد هم ممكن است با خطرات زيادی مواجه باشند. شايد شنيده باشيد كه هر روز سايتهای مختلفی بدليل هك شدن از كار می افتند و اطلاعات آنها به سرقت می روند.
شما بايد در درجه اول به عنوان يك كاربر اينترنت، مراقب وارد كردن اطلاعات محرمانه خود روی سايتهای مختلف باشيد و اطلاعات شخصی خود را روی هر سايتی وارد نكنيد.
اما شما به عنوان يك طراح و برنامه نويس وب، می توانيد راهكارهای مفيد و مختلفی برای كاهش اين خطرات در سايت، بيانديشيد.
EnCode كردن (كد كردن) داده ها و سپس DeCode كردن آنها در مواقع لزوم می تواند راه حل مناسبی باشد. همچنين ساختن يك نسخه پشتيبان از اطلاعات روی سرور هم می تواند در برخی از مواقع مفيد واقع شود.
اما با تمام اين اعمال خطر كاملا رفع نخواهد شد و هميشه خطراتی اطلاعات شخصی كاربران شما را تهديد می كند اما با اين حال شما بايد همواره به كاربران اطمينان بدهيد كه از اطلاعات آنها محافظت می كنيد.

arman2000
چهارشنبه 09 اردیبهشت 1388, 12:12 عصر
با عرض سلام

ميشه چيزي شبيه به اين براي نمايش اطلاعات از ديتابيس طراحي كرد؟ منظورم اينه كه ديتابيس sql داشته باشيم از قبل. چيزي شبيه به فيش حقوقي

لوک خوش شانس
چهارشنبه 09 اردیبهشت 1388, 12:18 عصر
بله میشه .
اگه تو همین انجمن جستجو کنی میتونی کلی برنامه در مورد چیزی که می خوای پیدا کنی آرمان جان