آموزش رایگان 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 جلوگیری شود.

پیشنمایش

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

آموزش جامع کوکی (Cookie) در PHP + مدیریت اصولی و امنیت آن بر اساس استاندارد گوگل
1405/05/01 20:10

آموزش جامع کوکی (Cookie) در PHP + مدیریت اصولی و امنیت آن بر اساس استاندارد گوگل

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

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

مطالعه بیشتر
آموزش جامع و اصولی جستجو در دیتابیس با PHP و MySQL (مطابق استانداردهای گوگل)
1405/05/13 21:26

آموزش جامع و اصولی جستجو در دیتابیس با PHP و MySQL (مطابق استانداردهای گوگل)

مطالعه بیشتر
آموزش جامع ساخت فرم ورود کاربر در PHP (براساس استانداردهای گوگل و امنیت بالا)
1405/05/14 22:03

آموزش جامع ساخت فرم ورود کاربر در PHP (براساس استانداردهای گوگل و امنیت بالا)

مطالعه بیشتر
مدیریت خطاها و استفاده از try...catch در جاوا اسکریپت: راهنمای کامل و مثال‌ها
1403/07/28 21:58

مدیریت خطاها و استفاده از try...catch در جاوا اسکریپت: راهنمای کامل و مثال‌ها

مطالعه بیشتر
راهنمای کامل لیست‌ها در HTML: آموزش انواع و اصول سئو
1402/05/20 22:02

راهنمای کامل لیست‌ها در HTML: آموزش انواع و اصول سئو

مطالعه بیشتر
آموزش تغییر نوع و اندازه فونت و رنگ متن با CSS: استایل‌دهی حرفه‌ای به متن‌ها
1402/06/05 00:13

آموزش تغییر نوع و اندازه فونت و رنگ متن با CSS: استایل‌دهی حرفه‌ای به متن‌ها

مطالعه بیشتر
آموزش اصول Web APIs و نحوه استفاده از آن‌ها در جاوا اسکریپت: راهنمای کامل با مثال‌ها
1403/08/01 20:05

آموزش اصول Web APIs و نحوه استفاده از آن‌ها در جاوا اسکریپت: راهنمای کامل با مثال‌ها

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

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

مطالعه بیشتر
آموزش کامل کار با fopen، سطوح دسترسی و حذف فایل در PHP
1405/05/04 23:28

آموزش کامل کار با fopen، سطوح دسترسی و حذف فایل در PHP

مطالعه بیشتر
راهنمای جامع جلوگیری از SQL Injection در PHP (طبق استانداردهای گوگل)
1405/05/13 21:19

راهنمای جامع جلوگیری از SQL Injection در PHP (طبق استانداردهای گوگل)

مطالعه بیشتر
استفاده از overflow در CSS برای مدیریت محتوای اضافی: راهنمای کامل و کاربردی
1403/08/11 21:37

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

مطالعه بیشتر

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