آموزش ساخت سیستم مدیریت نام واقعی با PHP
سیستم مدیریت نام واقعی (Real Name System – RNS) یک سیستم حیاتی برای هر وبسایت یا اپلیکیشنی است که نیاز به احراز هویت کاربران و جلوگیری از هویتهای جعلی دارد. این سیستم به کاربران اجازه میدهد تا با استفاده از اطلاعات واقعی خود (نام، نام خانوادگی، کد ملی و غیره) در سیستم ثبتنام کنند و هویت آنها تأیید شود. این مقاله به بررسی گام به گام ساخت یک سیستم مدیریت نام واقعی با استفاده از PHP میپردازد.
بخش اول: طراحی پایگاه داده
اولین قدم در ساخت سیستم مدیریت نام واقعی، طراحی پایگاه داده است. یک جدول اصلی به نام ‘users’ برای ذخیره اطلاعات کاربران ضروری است. ساختار پیشنهادی این جدول به شرح زیر است:
- id: کلید اصلی، عدد صحیح، خودکار افزایش
- first_name: نام کاربر، رشته متنی
- last_name: نام خانوادگی کاربر، رشته متنی
- national_code: کد ملی کاربر، رشته متنی (بهتر است به صورت رشته ذخیره شود تا لیدینگ زیرو ها حفظ شوند)
- birth_date: تاریخ تولد کاربر، تاریخ
- phone_number: شماره تلفن کاربر، رشته متنی
- email: ایمیل کاربر، رشته متنی
- password: رمز عبور کاربر، رشته متنی (هش شده)
- verified: وضعیت تأیید هویت، بولین (0 = تأیید نشده، 1 = تأیید شده)
- verification_code: کد تأیید هویت، رشته متنی
- created_at: تاریخ ایجاد رکورد، تاریخ
- updated_at: تاریخ آخرین بهروزرسانی رکورد، تاریخ
این ساختار، اطلاعات پایه مورد نیاز برای احراز هویت کاربران را در بر میگیرد. میتوانید فیلدهای دیگری مانند آدرس، تصویر پروفایل و غیره را نیز به این جدول اضافه کنید.
بخش دوم: پیادهسازی فرم ثبتنام
فرم ثبتنام باید شامل فیلدهای متناظر با ستونهای جدول ‘users’ باشد. در این فرم، باید از اعتبارسنجی سمت کاربر (Client-Side Validation) برای بررسی اولیه صحت دادههای وارد شده استفاده شود. همچنین، باید از اعتبارسنجی سمت سرور (Server-Side Validation) برای اطمینان از صحت و امنیت دادهها استفاده شود. در اینجا یک مثال ساده از فرم ثبتنام HTML آورده شده است:
<form action="register.php" method="post"> <label for="first_name">نام:</label> <input type="text" id="first_name" name="first_name" required><br> <label for="last_name">نام خانوادگی:</label> <input type="text" id="last_name" name="last_name" required><br> <label for="national_code">کد ملی:</label> <input type="text" id="national_code" name="national_code" required><br> <label for="birth_date">تاریخ تولد:</label> <input type="date" id="birth_date" name="birth_date" required><br> <label for="phone_number">شماره تلفن:</label> <input type="text" id="phone_number" name="phone_number" required><br> <label for="email">ایمیل:</label> <input type="email" id="email" name="email" required><br> <label for="password">رمز عبور:</label> <input type="password" id="password" name="password" required><br> <input type="submit" value="ثبت نام"> </form>
بخش سوم: پردازش فرم ثبتنام در PHP
فایل ‘register.php’ مسئول دریافت دادههای فرم ثبتنام، اعتبارسنجی آنها و ذخیره آنها در پایگاه داده است. در این فایل، باید از توابع امنیتی PHP برای جلوگیری از حملات SQL Injection و XSS استفاده شود. همچنین، باید رمز عبور کاربر را با استفاده از یک الگوریتم قوی مانند bcrypt هش کنید.
نمونهای از کد PHP برای پردازش فرم ثبتنام:
<?php
// اتصال به پایگاه داده
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// دریافت دادههای فرم
$first_name = $_POST["first_name"];
$last_name = $_POST["last_name"];
$national_code = $_POST["national_code"];
$birth_date = $_POST["birth_date"];
$phone_number = $_POST["phone_number"];
$email = $_POST["email"];
$password = $_POST["password"];
// اعتبارسنجی دادهها
if (empty($first_name) || empty($last_name) || empty($national_code) || empty($birth_date) || empty($phone_number) || empty($email) || empty($password)) {
die("لطفاً تمام فیلدها را پر کنید.");
}
// هش کردن رمز عبور
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
// درج اطلاعات کاربر در پایگاه داده
$sql = "INSERT INTO users (first_name, last_name, national_code, birth_date, phone_number, email, password, verified, verification_code, created_at, updated_at)
VALUES ('$first_name', '$last_name', '$national_code', '$birth_date', '$phone_number', '$email', '$hashed_password', 0, '', NOW(), NOW())";
if ($conn->query($sql) === TRUE) {
echo "ثبت نام با موفقیت انجام شد. لطفاً ایمیل خود را بررسی کنید.";
} else {
echo "Error: " . $sql . "
" . $conn->error;
}
$conn->close();
?>
بخش چهارم: پیادهسازی سیستم تأیید هویت
پس از ثبتنام کاربر، باید هویت او را تأیید کنید. یک روش رایج برای تأیید هویت، ارسال یک کد تأیید به ایمیل یا شماره تلفن کاربر است. در این روش، یک کد تصادفی تولید میشود و در جدول ‘users’ ذخیره میشود. سپس، یک ایمیل یا پیامک حاوی این کد برای کاربر ارسال میشود. کاربر باید این کد را در وبسایت یا اپلیکیشن وارد کند تا هویت او تأیید شود.
برای ارسال ایمیل، میتوانید از تابع `mail()` در PHP استفاده کنید. برای ارسال پیامک، میتوانید از یک سرویس ارسال پیامک استفاده کنید.
نمونهای از کد PHP برای ارسال ایمیل تأیید:
<?php // ... (اتصال به پایگاه داده و دریافت اطلاعات کاربر) ... // تولید کد تأیید $verification_code = bin2hex(random_bytes(32)); // بهروزرسانی جدول users با کد تأیید $sql = "UPDATE users SET verification_code = '$verification_code' WHERE email = '$email'"; // ... (اجرای کوئری) ... // ارسال ایمیل تأیید $to = $email; $subject = "تأیید هویت"; $message = "برای تأیید هویت خود، کد زیر را وارد کنید: " . $verification_code; $headers = "From: your_email@example.com"; mail($to, $subject, $message, $headers); ?>
بخش پنجم: پیادهسازی فرم تأیید کد
فرم تأیید کد باید شامل یک فیلد برای وارد کردن کد تأیید باشد. پس از وارد کردن کد، باید کد وارد شده با کد ذخیره شده در پایگاه داده مقایسه شود. اگر کدها مطابقت داشته باشند، وضعیت تأیید هویت کاربر را به ‘1’ تغییر دهید.
بخش ششم: ملاحظات امنیتی
امنیت سیستم مدیریت نام واقعی بسیار مهم است. در اینجا چند نکته امنیتی مهم آورده شده است:
- استفاده از HTTPS: تمام ارتباطات بین کاربر و سرور باید از طریق HTTPS انجام شود.
- جلوگیری از SQL Injection: از توابع امنیتی PHP مانند prepared statements برای جلوگیری از حملات SQL Injection استفاده کنید.
- جلوگیری از XSS: از توابع امنیتی PHP مانند `htmlspecialchars()` برای جلوگیری از حملات XSS استفاده کنید.
- هش کردن رمز عبور: رمز عبور کاربران را با استفاده از یک الگوریتم قوی مانند bcrypt هش کنید.
- محدود کردن تعداد تلاشهای ناموفق: تعداد تلاشهای ناموفق برای ورود به سیستم را محدود کنید تا از حملات brute-force جلوگیری شود.
- اعتبارسنجی دادهها: تمام دادههای ورودی را به دقت اعتبارسنجی کنید.
این مقاله یک راهنمای کلی برای ساخت سیستم مدیریت نام واقعی با PHP ارائه میدهد. با توجه به نیازهای خاص خود، میتوانید این سیستم را سفارشیسازی کنید و ویژگیهای بیشتری به آن اضافه کنید.
