آموزش رایگان PHP

آموزش گام به گام ساخت سیستم لاگین و لاگ‌اوت در PHP به صورت ایمن

1405/05/14 22:13 محراب حسن زاده
آموزش گام به گام ساخت سیستم لاگین و لاگ‌اوت در PHP به صورت ایمن

مقدمه؛ چرا امنیت در سیستم لاگین اهمیت دارد؟

سیستم ورود و خروج کاربران، دروازه اصلی ورود به بخش‌های حساس وب‌سایت شماست. پیاده‌سازی غیراصولی این سیستم می‌تواند وب‌سایت و اطلاعات کاربران شما را در معرض خطر قرار دهد. بر اساس استانداردهای گوگل و اصول نوین امنیت وب، رمزهای عبور هرگز نباید به صورت متنی (Plain Text) ذخیره شوند؛ همچنین ورودی‌های کاربر باید همواره فیلتر و اعتبارسنجی شوند تا جلوی حملاتی مثل SQL Injection گرفته شود.

گام اول: ساخت پایگاه داده برای کاربران

ابتدا باید یک جدول برای ذخیره اطلاعات کاربران در دیتابیس MySQL ایجاد کنیم. فیلد مربوط به پسورد را با طول مناسب (مثلاً ۲۵۵ کاراکتر) در نظر می‌گیریم تا پاسخگوی الگوریتم‌های قوی هش باشد.


CREATE DATABASE IF NOT EXISTS secure_db;
USE secure_db;

CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

گام دوم: اتصال به دیتابیس با PDO

استفاده از PDO در PHP به دلیل پشتیبانی از Prepared Statements امن‌ترین راه برای تعامل با پایگاه داده است. فایلی به نام config.php می‌سازیم:



define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'secure_db');

try {
    $pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD);
    $pdo--->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("خطا در اتصال به پایگاه داده: " . $e->getMessage());
}

گام سوم: طراحی فرم ورود به زبان HTML

در این بخش فرمی ساده و شکیل برای دریافت نام کاربری و رمز عبور طراحی می‌کنیم.


< div class="login-container" >
    < h2 >ورود به حساب کاربری< /h2 >
    < form action="login.php" method="post" >
        < div class="form-group" >
            < label >نام کاربری< /label >
            < input type="text" name="username" required >
        < /div >
        < div class="form-group" >
            < label >رمز عبور< /label >
            < input type="password" name="password" required >
        < /div >
        < button type="submit" >ورود< /button >
    < /form >
< /div >

گام چهارم: پردازش اطلاعات و احراز هویت در PHP

حالا بخش اصلی یعنی بررسی اطلاعات ارسالی از فرم، مقایسه هش رمز عبور با استفاده از تابع password_verify و مدیریت نشست (Session) را پیاده‌سازی می‌کنیم:



session_start();
require_once "config.php";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = trim($_POST["username"]);
    $password = trim($_POST["password"]);

    if (!empty($username) && !empty($password)) {
        $sql = "SELECT id, username, password FROM users WHERE username = :username";
        if ($stmt = $pdo--->prepare($sql)) {
            $stmt->bindParam(":username", $param_username, PDO::PARAM_STR);
            $param_username = $username;
            
            if ($stmt->execute()) {
                if ($stmt->rowCount() == 1) {
                    if ($row = $stmt->fetch()) {
                        $id = $row["id"];
                        $username = $row["username"];
                        $hashed_password = $row["password"];
                        
                        if (password_verify($password, $hashed_password)) {
                            // احراز هویت با موفقیت انجام شد؛ سشن‌ها مقداردهی می‌شوند
                            session_regenerate_id();
                            $_SESSION["loggedin"] = true;
                            $_SESSION["id"] = $id;
                            $_SESSION["username"] = $username;
                            
                            header("location: dashboard.php");
                            exit;
                        } else {
                            echo "رمز عبور وارد شده صحیح نیست.";
                        }
                    }
                } else {
                    echo "کاربری با این نام کاربری یافت نشد.";
                }
            } else {
                echo "مشکلی در پردازش پیش آمد. دوباره تلاش کنید.";
            }
            unset($stmt);
        }
    }
    unset($pdo);
}

گام پنجم: ایجاد پنل کاربری ایمن (dashboard.php)

بخش داشبورد باید طوری طراحی شود که فقط کاربران وارد شده به آن دسترسی داشته باشند. در غیر این صورت، کاربر به صفحه لاگین هدایت می‌شود:



session_start();

if (!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true) {
    header("location: login.php");
    exit;


< h1 >خوش آمدید، < /h1 >
< p >این یک پنل کاربری امن در PHP است.< /p >
< a href="logout.php" >خروج از حساب کاربری< /a >

گام ششم: ساخت فرآیند خروج ایمن (logout.php)

برای خارج کردن کاربر، باید تمام داده‌های سشن را پاک کرده و در نهایت سشن را به طور کامل تخریب (Destroy) کنیم:



session_start();

// خالی کردن آرایه سشن
$_SESSION = array();

// تخریب کوکی سشن در صورت وجود
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// تخریب سشن
session_destroy();

// انتقال کاربر به صفحه لاگین
header("location: login.php");
exit;

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

  • استفاده از HTTPS: همیشه سیستم لاگین خود را روی بستر امن HTTPS اجرا کنید تا اطلاعات کاربران در حین انتقال رمزنگاری شوند.
  • فعال‌سازی HttpOnly: کوکی‌های سشن را به صورت HttpOnly تنظیم کنید تا از طریق اسکریپت‌های مخرب جاوااسکریپت (حملات XSS) قابل سرقت نباشند.
  • استفاده از session_regenerate_id: پس از ورود موفق، شناسه سشن را تغییر دهید تا از حملات Session Fixation جلوگیری شود.

پیشنمایش

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

آموزش استایل‌دهی لیست‌ها در CSS: طراحی و استایل‌دهی ul و ol
1403/08/10 21:33

آموزش استایل‌دهی لیست‌ها در CSS: طراحی و استایل‌دهی ul و ol

مطالعه بیشتر
آموزش ساخت دیتابیس و جدول برای پروژه PHP طبق استاندارد گوگل
1405/05/04 23:38

آموزش ساخت دیتابیس و جدول برای پروژه PHP طبق استاندارد گوگل

مطالعه بیشتر
استفاده از clip-path در CSS برای برش‌های زیبا و جذاب: راهنمای کامل
1403/08/16 22:58

استفاده از clip-path در CSS برای برش‌های زیبا و جذاب: راهنمای کامل

مطالعه بیشتر
پارامترها و بازگشت از توابع در جاوا اسکریپت: نحوه تعریف و مدیریت خروجی‌ها
1402/11/02 23:32

پارامترها و بازگشت از توابع در جاوا اسکریپت: نحوه تعریف و مدیریت خروجی‌ها

مطالعه بیشتر
آموزش کامل include و require در PHP + تفاوت‌های کلیدی و کاربردی
1405/05/01 20:28

آموزش کامل include و require در PHP + تفاوت‌های کلیدی و کاربردی

مطالعه بیشتر
آموزش جامع و کاربردی توابع رشته‌ای در PHP (توابع strlen، str_replace و strpos)
1405/04/27 21:43

آموزش جامع و کاربردی توابع رشته‌ای در PHP (توابع strlen، str_replace و strpos)

مطالعه بیشتر
آموزش جامع ساخت پنل مدیریت ساده و استاندارد با PHP
1405/05/14 22:19

آموزش جامع ساخت پنل مدیریت ساده و استاندارد با PHP

مطالعه بیشتر
راهنمای جامع پاک‌سازی داده‌های ورودی در PHP بر اساس استانداردهای گوگل
1405/04/27 22:21

راهنمای جامع پاک‌سازی داده‌های ورودی در PHP بر اساس استانداردهای گوگل

مطالعه بیشتر
مقدمه‌ای به template و دیتابایندینگ در Vue.js: نحوه مدیریت داده‌ها و رندرینگ پویا
1402/06/28 00:49

مقدمه‌ای به template و دیتابایندینگ در Vue.js: نحوه مدیریت داده‌ها و رندرینگ پویا

مطالعه بیشتر
ایجاد Layout‌های واکنش‌گرا با flex-direction و justify-content در CSS Flexbox: راهنمای جامع
1403/08/11 20:59

ایجاد Layout‌های واکنش‌گرا با flex-direction و justify-content در CSS Flexbox: راهنمای جامع

مطالعه بیشتر
آموزش اصول طراحی الگوهای برنامه‌نویسی (Design Patterns) در جاوا اسکریپت: راهنمای جامع با مثال‌ها
1403/08/04 19:28

آموزش اصول طراحی الگوهای برنامه‌نویسی (Design Patterns) در جاوا اسکریپت: راهنمای جامع با مثال‌ها

مطالعه بیشتر
آموزش کامل توابع در PHP: از مقدماتی تا پیشرفته با استانداردهای گوگل
1405/04/16 01:02

آموزش کامل توابع در PHP: از مقدماتی تا پیشرفته با استانداردهای گوگل

مطالعه بیشتر

تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد