اذهب إلى المحتوى
  • 0

ye

Ayman Abdullah3

السؤال

<?php

session_start();

 

// توليد توكن CSRF عند بدء الجلسة

if (empty($_SESSION['token'])) {

    $_SESSION['token'] = bin2hex(random_bytes(32));

}

 

// الاتصال بقاعدة البيانات

$servername = "localhost";

$username = "root";

$password = "";

$dbname = "test_db";

 

$conn = new mysqli($servername, $username, $password, $dbname);

 

// تحقق من الاتصال

if ($conn->connect_error) {

    error_log("فشل الاتصال: " . $conn->connect_error); // سجل الخطأ في ملف السجل

    die("حدث خطأ أثناء الاتصال بقاعدة البيانات.");

}

 

// تسجيل المستخدم

if (isset($_POST['register'])) {

    // التحقق من توكن CSRF

    if (!hash_equals($_SESSION['token'], $_POST['token'])) {

        die("خطأ: التوكن غير صحيح.");

    }

 

    // التحقق من المدخلات

    $username = trim($_POST['username']);

    $password = $_POST['password'];

 

    // التحقق من طول اسم المستخدم (من 3 إلى 20 حرف)

    if (strlen($username) < 3 || strlen($username) > 20) {

        die("خطأ: يجب أن يكون اسم المستخدم بين 3 و 20 حرفًا.");

    }

 

    // التحقق من وجود رموز غير مسموح بها في اسم المستخدم

    if (!preg_match('/^[a-zA-Z0-9_]+$/', $username)) {

        die("خطأ: اسم المستخدم يمكن أن يحتوي على أحرف إنجليزية وأرقام وشرطة سفلية فقط.");

    }

 

    // التحقق من طول كلمة المرور (يجب أن تكون على الأقل 8 أحرف)

    if (strlen($password) < 8) {

        die("خطأ: يجب أن تكون كلمة المرور على الأقل 8 أحرف.");

    }

 

    // تشفير كلمة المرور

    $hashed_password = password_hash($password, PASSWORD_DEFAULT);

 

    // استخدام إعدادات مستعدة للحماية من SQL Injection

    $stmt = $conn->prepare("INSERT INTO users (username, password) VALUES (?, ?)");

    if ($stmt) {

        // ربط المتغيرات

        $stmt->bind_param("ss", $username, $hashed_password);

 

        // تنفيذ الاستعلام

        if ($stmt->execute()) {

            echo "تم التسجيل بنجاح!<br>";

            echo "اسم المستخدم المدخل: " . htmlspecialchars($username, ENT_QUOTES, 'UTF-8');

        } else {

            error_log("خطأ أثناء تنفيذ الاستعلام: " . $stmt->error); // سجل الخطأ في ملف السجل

            echo "حدث خطأ أثناء التسجيل. يرجى المحاولة لاحقًا.";

        }

 

        // إغلاق البيان

        $stmt->close();

    } else {

        error_log("خطأ في التحضير: " . $conn->error); // سجل الخطأ في ملف السجل

        echo "حدث خطأ أثناء معالجة الطلب.";

    }

}

 

$conn->close();

?>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>تسجيل الاشتراك</title>

</head>

<body>

    <h2>تسجيل الاشتراك</h2>

    <form method="post" action="">

        <input type="text" name="username" placeholder="اسم المستخدم" required><br>

        <input type="password" name="password" placeholder="كلمة المرور" required><br>

        <input type="hidden" name="token" value="<?= htmlspecialchars($_SESSION['token'], ENT_QUOTES, 'UTF-8') ?>">

        <button type="submit" name="register">تسجيل</button>

    </form>

</body>

</html>

اريد التاكد هل تم حمابته من بعض الثغرات المستخدمه في الكود

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

لا توجد أي إجابات على هذا السؤال بعد

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...