Vahid

ساخت یک سیستم احراز هویت

8 پست در این موضوع قرار دارد

طرز کار سیستم احراز هویت

سیستم احراز هویت از دو قسمت تشکیل شده که در این آموزش قصد داریم هر دو آنها رو بسازیم. برای شروع به یک پردازشگر login نیاز داریم که درستی نام کاربری و کلمه ی عبور وارد شده در فرم رو چک کنه و به یک قطعه کد نیاز داریم که بتونیم اون رو در بالای هر اسکریپت قرار داد تا پیش از آنکه اجازه ی ادامه ی کار بدهد، اطمینان حاصل کند که کاربر احراز هویت شده است.

کدی که چک می‌کنه کاربر احراز هویت شده یا نه رو باید تو یک فایل ضمیمه (auth.inc) قرار بدید. در اینصورت براحتی می‌تونید با قرار دادن دستور زیر در بالای هر اسکریپتی، از صفحه وب خودتون در برابر کاربران نا آشنا محافظت کنید.

include "auth.inc"

شما می‌توانید با استفاده از یک متغیر، نام کاربری کاربر وارد شده رو ذخیره کنید. اگر این متغیر حاوی یک نام کاربری باشد، معلوم می‌شود که کاربر وارد شده است. خاج شدن کاربر هم بسادگی با حذف این متغیر انجام می‌شود. تا زمانی که هیچکس دیگری از حوزه میزبانی سایت شما استفاده نمی‌کند و نمی‌تواند نشستی ایجاد کند که باعث تداخل شود، سایت شما از امنیت کافی برخوردار خواهد بود. بنابراین فایل auth.inc می‌تواند واقعا به سادگی آنچه در زیر می‌بینید باشد:


session_start();
if (!isset ($_SESSION["auth_username"])) {
echo "شما بايد وارد شويد تا اين برگه را ببينيد." ;
exit;
}

اینجا اگه کاربر login نکرده باشه، فقط یه پیغام نشون میده بعدش هم از اسکریپت خارج میشه.

ایجاد فرآیند login

فرم login نیازمند دو فیلد username و password و یک دکمه submit است. پس از آنکه این عناصر در فرم login گذاشته شده اند، خودتون می‌تونید استایل دلخواهتون رو به فرم بدین. فعلا با جدول بندی به فرم استایل میدیدم.

<form action="login.php" method="post">
<table border=0>
<tr>
<td>نام کاربری:</td>
<td><input type="text" size=10 name="username"></td>
</tr>
<tr>
<td>کلمه عبور:</td>
<td><input type="password" size=10 name="password"></td>
</tr>
</table>
<input type=submit value="ورود">
</form>

فیلد کلمه عبور

فیلد نوع password دقیقا مثل فیلد نوع text کار می‌کند، با این تفاوت که هنگام تایپ کردن کارکتر‌ها آنها را مخفی می‌کند. تنها محدودیتی که فیلد کلمه عبور دارد این است که نمی‌توان با خاصیت value برای آن مقدار پیش فرض تعیین کرد.

این اسکریپت باید مقادیر نام کاربری و کلمه ی عبور ارسال شده را با استفاده از لیست کاربران مجاز چک کند. در بیشتر موارد، شما می‌توانید این مقادیر را با اطلاعات موجود در بانک اطلاعاتی کاربران چک کنید که بعدا در مورد دسترسی به بانک‌های اطلاعاتی در php صحبت خواهیم کرد، اما فعلا می‌توانید از یک آرایه ی ساده که در آن اطلاعات کاربران مجاز به استفاده از سایت ذخیره شده است استفاده کنید.


<?php
session_start();
$passwords = array("chris" => "letmein", "damon" => "thisisme", "shelley" => "mypassword", "vanessa" => "opensource");
if (!$_post["username"] or !$_post["password"]) {
echo "شما باید نام کاربری و کلمه ی عبور خود را وارد کنید." ;
exit ;
}
if ($_post ["password"]== $passwords[$post["username"]]){
echo "ورود با موفقیت"
$_session["auth_username"] = $_post["username"];<br />
}
else {
echo "ورود ناموفق";
}
?>

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

سپس کلمه عبور وارد شده با عنصری از آرایه که نام کاربری است مقایسه می‌شود اگر هردو با یکدیگر مطابقت داشته باشند، کاربر اجازه ی ورود به سایت را پیدا می‌کند و متغیر auth_username مقدار دهی اولیه میشود. در غیر اینصورت پیغامی‌مبنی بر ورود نا موفق نشان داده می‌شود.

12

به اشتراک گذاری این پست


لینک به پست

البته این روش به راحتی قابل دور زدن است .

1

به اشتراک گذاری این پست


لینک به پست

البته این روش به راحتی قابل دور زدن است .

بله! این مطلب فقط برای آموزش هست.

1

به اشتراک گذاری این پست


لینک به پست

البته این روش به راحتی قابل دور زدن است .

چرا؟ چه مشکلی داره؟ چه کنیم که نشه دور زد؟

منم از همین راه برای احراز هویت استفاده می کنم:


public function isAdmin()
{
$myDb = new dbModel;
session_start();
$userAgent = $myDb->hashsalt($_SESSION['userAgent']);
$userIp = $myDb->hashsalt($_SESSION['userIp']);
if (!isset($_SESSION['username']) and empty($_SESSION['username']) || $userIp != $_SERVER['REMOTE_ADDR'] || $userAgent != $_SERVER['HTTP_USER_AGENT'])
{
session_destroy();
header("Location: index.php?op=user");
exit();
}

الان برای افزایش امنیت همین کد چیکار کنم؟

0

به اشتراک گذاری این پست


لینک به پست

الان برای افزایش امنیت همین کد چیکار کنم؟

مثلا یه مورد اینکه سشن رو در پایگاه یا فایل ذخیره کنیم .

1

به اشتراک گذاری این پست


لینک به پست

مثلا یه مورد اینکه سشن رو در پایگاه یا فایل ذخیره کنیم .

اون که آره!

ولی من سرور مجازی گرفتم که این مشکلو نداشته باشم!

0

به اشتراک گذاری این پست


لینک به پست

استفاده از session در کل توصیه نمیشه

یک روش اینه که هنگام لاگین کد تولید شده تصادفی را برای شناسایی کاربر استفاده کنید

و کد را در رکورد کاربر در دیتابیس ذخیره کنید + فیلدی برای حداکثر زمان لاگین

3

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

استفاده از session در کل توصیه نمیشه

یک روش اینه که هنگام لاگین کد تولید شده تصادفی را برای شناسایی کاربر استفاده کنید

و کد را در رکورد کاربر در دیتابیس ذخیره کنید + فیلدی برای حداکثر زمان لاگین

ممنون!

این کارم کردم، این راه حل برای جلوگیری از حمله XSRF هست دیگه؟ نه؟!!

و کارای دیگه: بعد از لوگین session_id، ریجنریت میشه، کلیدهای سشن به صورت کد شده ذخیره میشن، اصلا نام کاربری در سشن نیست فقط id کاربر هست. هر بار هم آی پی و user agent کاربر چک میشه. و همونطور که گفتم سرور هم مجازی هست. اینا کفایت می کنه یا بازم باید کار دیگه ای بکنم؟!! اگر هست راهنمایی کنید لطفا.

ویرایش شده در توسط Anisi
0

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری

  • مطالب مشابه

    • توسط seyed reza
      سلام خسته نباشید.
      من به تازگی یک قالب html رو به wp تبدیل کردم ولی برای ساخت فایل های page.php و single.php و single-product.php به مشکل خوردم چون php بلد نیستم
      صفحه اصلی و صفحه فروشگاه درسته ولی صفحات دیگر مثل حساب کاربری مشکل داره
      چند بار از قالب های دیگه اون قایل هارو جایگذین کردم ولی اکثرشون رو کلا نشون نمی داد و یکی رو هم بدون css ( یعنی فقط html ) نشون داد که عکسشو میزارم
      ممنون میشم یکی کمکم کنه فایل هارو بسازم.
      درضمن فایل رو واسه قالبی که با ووکامرس ست باشه میخوام
      ممنون

    • توسط unid_user
      سلام و درود
      دوستان گرامی ، چطوری میشه کدهای جاوا اسکریپت و جی کوئری در فایل js رو به وسیله php یا توابع وردپرس داینامیک کنیم.
      مثلا یه متغیر در فایل js دارم که میخوام از طریق php یا توابع وردپرس هر بار که خواستم یک مقدار رو اختصاص بدم.
      با تشکر و سپاس
    • توسط Selno
      سلام دوستان به یه مشکلی برخوردم که هیچ جوره حل نمیشه 
      یه پلاگین به اسم تایتان فریمورک دارم که برای قالب اپشن پنل میسازه ولی تو بخش داینامیک سازی استایل ها گیر کردم برای مثال میخوام کاربر رنگ سایت رو انتخاب کنه اما چجوری میتونم متغیر php  رو داخل استایل قرار بدم که اجرا بشه ؟ اگه میشه با مثال توضیح بدید چون چنتا راه حل دیدم اما مشکلم رو حل نکرد
    • توسط soma
      سلام دوستان و اساتید 
      من خیلی تازه کارم توی php و برای بخش های زیادی نیاز به راهنمایی واضح تر از تمام آموزشهایی که وجود داره دارم  لطفا دریغ نکنید و راهنمایی کنید 
      اول از همه درباره تابع is_array و in_array سوال دارم ، چطور از این توابع برای دریافت و ارسال اطلاعات برای یک چک باکس استفاده کنم 
      به عنوان مثال تفسیر کد زیر به چه صورت هست
      <?php $name_check_box = isset($name_is_mohem) ? $my_code_name_is_mohem : ''; $name_check_box = ' <div class="checkbox-class">' $my_code_opt_array = array( 'std' => $name_check_box, 'cust_id' => 'mycodeId', 'cust_name' => 'my_code_name_is_mohem[]', 'cust_type' => 'checkbox', 'classes' => '', 'return' => true, 'extra_atr' => (is_array($my_code_name_is_mohem) && in_array($name_check_box , $my_code_name_is_mohem) ? ' checked="checked"' : ''), ); $name_check_box .= $my_code_form_fields->my_code_form($my_code_opt_array); $name_check_box .= '<label class="mycodclass">' . my_code_srt('my_code_name_is_mohem') . '</label> </div>'; ?>  
    • توسط oghyanoos98
      سلام
      پلاگین برای وردپرس مانند سایت idigic رو میخواستیم برای فروش فالوور و لایک اینستاگرام
       فقط بخش سفارششو میخوایم سایت رو داریم خودمون، که اطلاعات یوزر رو از اینستا بگیره مثل سایت بالا و  به ای پی ای ما وصل شه و سفارشش رو اتومات ثبت کنه .
      ممنون