<?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>
اريد التاكد هل تم حمابته من بعض الثغرات المستخدمه في الكود