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

كيف يمكن حماية سكربت ممبرمج بلغة php من السرقة

ناnaif ناnaif

السؤال

السلام عليكم ورحمة الله و بركاته 

لوسمحتم محتاج طريقة عمل نظام حماية سكربت ممبرمج بلغة php

ب نظام السريالات بحيث بعد المستخدم يقوم ب التسجيل في الموقع الرسمى 

للسكربت و ثما يقوم بالذهاب إلى صفحة شراء السكربت و يقوم بالشراء و بعد الشراء يظهر له خيار تحميل السكربت و خيار تفعيل السكربت بحيث في صفحة تفعيل السكربت يكون فيها رقم سريال مخصص للعميل فقط بحيث يتكون من 

id العميل في الموقع-ارقام و حروف عشوائية-تاريخ السيريال بدون /

بحيث يتكون السيريال من 50 حرف و يتم تخزينة في قاعدة اليبانات 

و في معالج تثبيت السكربت يقوم المستخدم ب إدخال إسم المستخدم اللذي سجل بة في الموقع الرسمى للسكربت و السيريال ويضغط على متابعة و يتم مطابقة اسم المستخدم و السريال و إذا كانت بيانات خاطئة يتم حذف ملف install 

و إذا كانت صحيحة يتم المتابعة في تثبيت السكربت و  إذا كان قد استخدم السيريال من قبل في اي موقع اخر يتم إضهار رسالة انه تم الحصول على هذا السكربت بطريقة غير قانونية

و كيف يمكن عمل كود يقوم بالتحقق من إذا تم إزالة الكود الخاص بالحماية بحيث إذا تم إزالة كود الحماية يتم إعادة التوجية إلى الموقع الرسمى للسكربت 

تم التعديل في بواسطة ناnaif ناnaif
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

تلك العملية تتم من جهة قاعدة البيانات، فالأمر عبارة عن تخزين بيانات ثم مقارنتها والتحقق منها والسماح أو المنع بعد ذلك حسب النتيجة.

فأولاً، تحتاج إلى إنشاء جداول قاعدة البيانات لتخزين المستخدمين والسيريالات.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL
);

CREATE TABLE serials (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    serial_key VARCHAR(50) NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    used TINYINT(1) DEFAULT 0
);

ثم عند شراء المستخدم للسكربت، يتم توليد السيريال وتخزينه في قاعدة البيانات.

function generateSerial($userId) {
    $randomPart = bin2hex(random_bytes(15)); 
    $datePart = date('Ymd'); 
    $serial = $userId . '-' . $randomPart . '-' . $datePart;

    return $serial;
}

function storeSerial($userId, $serial) {
    $pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
    
    $stmt = $pdo->prepare("INSERT INTO serials (user_id, serial_key) VALUES (:user_id, :serial_key)");
    $stmt->execute(['user_id' => $userId, 'serial_key' => $serial]);
}

// افتراض أن المستخدم قد اشترى السكربت وتم تمرير معرف المستخدم
$userId = 1;
$serial = generateSerial($userId);
storeSerial($userId, $serial);

وفي صفحة التحقق من السيريال، تقوم بالبحث عن المستخدم ثم التحقق من السريال ثم تحديث حالة السيريال على أنه أصبح مستخدم ثم متابعة التثبيت، وإن لم يحدث ذلك يعني أنّ التحقق فشل ولا يتم المتابعة.

function verifySerial($username, $serial) {
    $pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
    
    $stmt = $pdo->prepare("SELECT id FROM users WHERE username = :username");
    $stmt->execute(['username' => $username]);
    $user = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($user) {
        $userId = $user['id'];
        
        $stmt = $pdo->prepare("SELECT * FROM serials WHERE user_id = :user_id AND serial_key = :serial_key AND used = 0");
        $stmt->execute(['user_id' => $userId, 'serial_key' => $serial]);
        $serialData = $stmt->fetch(PDO::FETCH_ASSOC);

        if ($serialData) {
            $stmt = $pdo->prepare("UPDATE serials SET used = 1 WHERE id = :id");
            $stmt->execute(['id' => $serialData['id']]);
            
            return true;
        }
    }

    return false;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $serial = $_POST['serial'];
    
    if (verifySerial($username, $serial)) {
    } else {
        unlink('install.php');
        echo "بيانات خاطئة أو السيريال مستخدم سابقاً.";
    }
}

وبخصوص التحقق من أن كود الحماية لم يُزال، يمكنك استخدام تقنيات مثل Obfuscation (إخفاء الكود) أو تضمين كود التحقق في أماكن متعددة في السكربت. 

function checkIntegrity() {
    if (!file_exists('install.php')) {
        header('Location: رابط موقعك');
        exit();
    }
}

checkIntegrity();

حيث تقوم بتضمين الدالة السابقة في جميع الملفات المهمة للتأكد من أن ملف install.php لم يُحذف.

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

  • 0
بتاريخ 16 ساعة قال Mustafa Suleiman:

 .

شكرا لك على المساعدة و الرد لا كن عندى سؤال خارج الموضوع و هو :

لماذا سكربتات php تتكون من آلاف الملفات مثل vbulletin لإدارة المنتديات.

و الاوبن كارت لإدارة المتاجر.

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...