discord icon
سرور دیسکورد گاردایران

پست های پیشنهاد شده

با سلام خدمت دوستان عزیز 

امروز میخوایم باهم یک صفحه ورود بدون داشتن دیتابیس بسازیم که در کنارش صفحه ثبت نام هم موجوده و کاربران میتونن ثبت نام کنن.

 

 نوشتن صفحه ثبت نام:

قدم اول :خب قدم اول توی نوشتن صفحه ثبت ناممون کد های html هست که

یک فایل با نام register.php بسازید و کد های زیر رو قرار بدید:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <form method="post">
      Username: <input type="text" name="username">
    	<br><br>
      Password: <input type="password" name="password">
        <br><br>
      Confirm password: <input type="password" name="confirm_password">
    	<br><br>
      Email: <input type="email" name="email">
        <br><br>
    	<input type="submit" name="register" value="register">
    </form>
   </body>
</html>

در اینجا چهار input داریم که شامل نام کاربری، رمز عبور ، تکرار رمز عبور و ایمیل میشه و در نهایت یک دکمه ثبت نام.

 

قدم دوم : یک فایل با نام users.php بسازید و این کد رو خط اول قرار بدید:

<?php die('403'); ?>

خب در فایل users.php اطلاعات کاربران اعم از username و password و email قرار میگیره 

که از تابع die اول کدمون استفاده کردیم که اگر یک نفر این فایل رو توی سایت اجرا کرد خطای 403 بگیره.

 

 

قدم سوم: 

حالا برمیگردیم به فایل register.php که کد های php اونو بزنیم یعنی:

<?php
if (isset($_POST['register'])) {
    
  if (!$_POST['username']==''&&!$_POST['password']==''&&!$_POST['confirm_password']==''&&!$_POST['email']==''){
    // check confirm password
      if ($_POST['password']==$_POST['confirm_password']) {
        // add user
    
            // open file (file handle)
            $fh = fopen('users.php','a');
            
            // set user data
            $user = 'USERNAME:'.md5(sha1($_POST['username'])).',PASSWORD:'.md5(sha1($_POST['password'])).',EMAIL:'.base64_encode($_POST['email'])."\n";
            
            // write user information
            fwrite($fh,$user);
            
            // close users file
            fclose($fh);
            
      }
  }else{
    echo '<p style="color:red">Please answer all options.</p>';
  }

خط ۲ : از if استفاده کردیم برای بررسی اینکه کاربر دکمه register رو کلیک کرده یا نه

خط ۴ : بررسی کردیم که ایا تمام ایپویت ها رو وارد کرده کاربر یا نه 

خط ۶ : بررسی کردیم که آیا رمز عبود و تکرار رمز عبور دقیقا یکی هست یا نه اگه آره که بریم سراغ اضافه کردن کاربر

خط ۱۰ : وارد فایل users.php که قبلا ساختیم میشیم و میشه file handle ما

خط ۱۳ : توی متغیر user اطلاعات کاربر رو قرار میدم یعنی نام کاربری ، رمز عبود و ایمیل که نام کاربری و رمز عبود به صورت هش شده و ایمیل به صورت encode قرار میگیره.

خط ۱۶ : با تابع fwrite در آخر فایل users.php متغیر user رو اضافه میکنیم.

خط ۱۹ : فایل users.php رو میبندیم

خط ۲۲ و ۲۳ : نمایش خطا زمانی که تمام اینپوت ها رو کاربر وارد نکرده که میشه else شرطمون (خط ۴)

 

کد نهایی:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <form method="post">
      Username: <input type="text" name="username">
    	<br><br>
      Password: <input type="password" name="password">
        <br><br>
      Confirm password: <input type="password" name="confirm_password">
    	<br><br>
      Email: <input type="email" name="email">
        <br><br>
    	<input type="submit" name="register" value="register">
    </form>
   </body>
</html>
<?php
if (isset($_POST['register'])) {
    
  if (!$_POST['username']==''&&!$_POST['password']==''&&!$_POST['confirm_password']==''&&!$_POST['email']==''){
    // check confirm password
      if ($_POST['password']==$_POST['confirm_password']) {
        // add user
    
            // open file (file handle)
            $fh = fopen('users.php','a');
            
            // set user data
            $user = 'USERNAME:'.md5(sha1($_POST['username'])).',PASSWORD:'.md5(sha1($_POST['password'])).',EMAIL:'.base64_encode($_POST['email'])."\n";
            
            // write user information
            fwrite($fh,$user);
            
            // close users file
            fclose($fh);
            
      }
  }else{
    echo '<p style="color:red">Please answer all options.</p>';
  }
  
}

 

نوشتن صفحه ورود:

 

قدم اول:

یک فایل با نام login.php بسازید و کد های html زیر رو قرار بدید:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <form method="post">
    	Username: <input type="text" name="username">
    	<br><br>
    	Password: <input type="password" name="password">
    	<br><br>
    	<input type="submit" name="login" value="login">
    </form>
   </body>
</html>

(اگه دوست داشته باشید میتونید بهش استایل هم بدید ولی برای اینکه آموزش طولانی نشه ما اینکارو نمیکنیم)

 

 

قدم دوم : 

کد های php:


<?php

if (isset($_POST['login'])&&isset($_POST['username'])&&isset($_POST['password'])) {

	$file_handle= fopen('users.php','r');
	$users=fread($file_handle,filesize('users.php'));
    $users=explode("\n",$users);
    $user_id='';
    
      for ($i=0;$i<count($users)-1;$i++) { 
        // check username
        if (strstr($users[$i],md5(sha1($_POST['username'])))) {
            $user_id .= $users[$i];
            // check password
            if (strstr($user_id,md5(sha1($_POST['password'])))) {
                $login='true';
            }
        }
      }
      
      if (isset($login)&&$login=='true') {
          $user_email = str_replace('USERNAME:'.md5(sha1($_POST['username'])).',PASSWORD:'.md5(sha1($_POST['password'])).',EMAIL:','',$user_id);

          session_start();
          $_SESSION['login']='true';
          $_SESSION['name']=$_POST['username'];
          $_SESSION['email']=base64_decode($user_email);

          header('Location: panel.php');
          exit;
      }else{
          echo '<p style="color:red;">username and password is wrong!</p>';
      }
}

خب به صورت کلی بخوایم توضیح بدیم که چه اتفاقی افتاده میگیم که اول چک میکنه که ایا username,password ارسال شده یا نه 

بعد میاد فایل users.php رو باز میکنه با mode خواندن یا read

بعد متغیر users رو مساوی با داده های فایل users.php قرار میده

حالا میایم دوباره متغیر users رو تعریف میکنیم و با استفاده از تابع explode هر اینتری که توی فایل هست(میشه همون متغیر users) رو توی یک اندیس ارایه قرار میدم.

یک متغیر user_id هم تعریف میکنیم چون بعدا ازش میخوایم استفاده کنیم خطای undefined var نده بهمون

توی for میایم روی اندیس های آرایه users کار میکنیم و با یک if دونه دونه یوزر ها رو بررسی میکنیم با هش شده ی یوزرنیمی که برامون ارسال شده

بعد اگر درست بود یعنی اون اندیس یا همون خط،  اطلاعات یوزر ما هست که قرارش میدیم توی user_id و البته از .= که استفاده کردیم به این معنیه :

$user_id = $user_id + $users[$i];

که اگر از قبل user_id رو تعریف نمیکردیم خطا میداد و دلیل اینکه از .= استفاده کردیم این بود که قراره توی بخش های بعد ازش استفاده کنیم.

خب بعد اومدیم دوباره با یک if بررسی کردیم و با تابع strstr چک کردیم که آیا پسورد (به صورت هش شده) وجود داره توی اون اندیس یا نه در واقع پسورد رو بررسی میکنیم.

و اگر درست بود میایم متغیر لاگین رو مساوی با true قرار میدیم که یعنی این شخص لاگینش انجام شده.

جلوتر میایم میگیم اگر login شده بود بیا توی این شرط

که اول میایم ایمیل رو از اون user خارج میکنیم و میزاریم توی متغیر email که روش های مختلفی میشه این کارو انجام داد ولی من از str_replace استفاده کردم 

حتی از explode هم میشه استفاده کرد و...

در نهایت session رو استارت کردیم و session ها رو ست کردیم

که من اومدم name رو مساوی با یوزر نیم و email رو مساوی با ایمیل شخص (با توجه به یوزرنیم و پسوردی که وارد کرده) به صورت دیکد قرار دادم.

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

و یک else هم داریم برای زمانی که یوزر و پسورد اشتباه هست ارور بده.

 

کد نهایی پیج لاگین:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <form method="post">
    	Username: <input type="text" name="username">
    	<br><br>
    	Password: <input type="password" name="password">
    	<br><br>
    	<input type="submit" name="login" value="login">
    </form>
   </body>
</html>

<?php

if (isset($_POST['login'])&&isset($_POST['username'])&&isset($_POST['password'])) {

	$file_handle= fopen('users.php','r');
	$users=fread($file_handle,filesize('users.php'));
    $users=explode("\n",$users);
    $user_id='';
    
      for ($i=0;$i<count($users)-1;$i++) { 
        // check username
        if (strstr($users[$i],md5(sha1($_POST['username'])))) {
            $user_id .= $users[$i];
            // check password
            if (strstr($user_id,md5(sha1($_POST['password'])))) {
                $login='true';
            }
        }
      }
      
      if (isset($login)&&$login=='true') {
          $user_email = str_replace('USERNAME:'.md5(sha1($_POST['username'])).',PASSWORD:'.md5(sha1($_POST['password'])).',EMAIL:','',$user_id);

          session_start();
          $_SESSION['login']='true';
          $_SESSION['name']=$_POST['username'];
          $_SESSION['email']=base64_decode($user_email);

          header('Location: panel.php');
          exit;
      }else{
          echo '<p style="color:red;">username and password is wrong!</p>';
      }
}

 

 

نکته:‌ دوستان عزیز توی پیج ریجستر یک باگ خطرناک داریم که به شکل یک چالش میتونید بهش نگاه کنید،

اگر دوستان تمایل داشتید در پایین تاپیک باگ رو ارائه بدید و همچنین نحوه پچ کردنش چون احتملا تا چند روز دیگه ادامه تاپیک نحوه بستن آسیب پذیری و نحوه استفاده از اون 

رو گداشتیم و یکم ریزه کاری پیج لاگین.

 

 

موفق و پیروز باشید.

 

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


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

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

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

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

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

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

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

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

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