Ayman Abdullah3 نشر منذ 3 ساعة أرسل تقرير مشاركة نشر منذ 3 ساعة <?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> اريد التاكد هل تم حمابته من بعض الثغرات المستخدمه في الكود اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
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>
اريد التاكد هل تم حمابته من بعض الثغرات المستخدمه في الكود
رابط هذا التعليق
شارك على الشبكات الإجتماعية
0 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.