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

أيهما نستخدم الجلسة session او ملفات تعريف الارتباط cookies؟

علي الكاسر

السؤال

السلام عليكم 

انا استخدم تقنية اجاكس لجلب المعلومات من السيرفر، ولكن لابد لي من استخدام php بين اكوادhtml فكيف استغني عن امواد php داخل اكواد html خاصة فيما يتعلق بأظهار وأخفاء بعض العناصر حسب رتبة الاعضاء. 

هل استخدم الكوكيز تبع جافا سكربت وهل هي امنه، وفي هذه الحاله هل استغني عن الجلسه في php او استخدمهم معا، السؤال كيف المبرمجين يتعاملوا مع هذا الامر ارجو الاجابه وشكرا

تم التعديل في بواسطة Wael Aljamal
توضيح السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

إن الجلسة session هي تخزين مؤقت على المخدم، غالبا مدتها 20 دقيقة ثم يتم حذفها (يتم تقليلها لعدم ملئ ذاكرة المخدم)، أما ملفات تعريف الارتباط Cookies تتخزن في المتصفح أي ذاكرة لدى المستخدم وتكون مدة صلاحيتها كبيرة حتى سنة وأكثر.

  • معلومات الجلسة آمنة أكثر
بتاريخ 1 ساعة قال علي الكاسر:

فكيف استغني عن اكواد php داخل اكواد html خاصة فيما يتعلق بأظهار وأخفاء بعض العناصر حسب رتبة الاعضاء. 

استخدم الشرط if حسب رتبة المستخدم وحدد ضمنها الشيفرات البرمجية التي تريد تنفيذها.. هذا يتوقف عليك و كيفية تعاملك مع جلب بيانات الرتبة وما إلى ذلك.

if (user->role == 'admin') {
	// admin مدير
}
else {
	// normal user hide    لا تعرض شيئ أو اعرض بيانات للمستخدم العادي
}

 

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

  • 0
بتاريخ 1 دقيقة مضت قال علي الكاسر:

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

لكي تصبح cookies آمنه يمكنك تطبيق تشفير ولو بسيط عليها، ابحث عن أي ملف PHP للتشفير، مثلا استخدم التالي:

<?php

class AES256Encryption
{
    public const BLOCK_SIZE = 8;
    public const IV_LENGTH = 16;
    public const CIPHER = 'AES256';

    public static function generateIv(bool $allowLessSecure = false): string
    {
        $success = false;
        $random = openssl_random_pseudo_bytes(openssl_cipher_iv_length(static::CIPHER));
        if (!$success) {
            if (function_exists('sodium_randombytes_random16')) {
                $random = sodium_randombytes_random16();
            } else {
                try {
                    $random = random_bytes(static::IV_LENGTH);
                }
                catch (Exception $e) {
                    if ($allowLessSecure) {
                        $permitted_chars = implode(
                            '',
                            array_merge(
                                range('A', 'z'),
                                range(0, 9),
                                str_split('~!@#$%&*()-=+{};:"<>,.?/\'')
                            )
                        );
                        $random = '';
                        for ($i = 0; $i < static::IV_LENGTH; $i++) {
                            $random .= $permitted_chars[mt_rand(0, (static::IV_LENGTH) - 1)];
                        }
                    }
                    else {
                        throw new RuntimeException('Unable to generate initialization vector (IV)');
                    }
                }
            }
        }
        return $random;
    }

    protected static function getPaddedText(string $plainText): string
    {
        $stringLength = strlen($plainText);
        if ($stringLength % static::BLOCK_SIZE) {
            $plainText = str_pad($plainText, $stringLength + static::BLOCK_SIZE - $stringLength % static::BLOCK_SIZE, "\0");
        }
        return $plainText;
    }

    public static function encrypt(string $plainText, string $key, string $iv): string
    {
        $plainText = static::getPaddedText($plainText);
        return base64_encode(openssl_encrypt($plainText, static::CIPHER, $key, OPENSSL_RAW_DATA, $iv));
    }

    public static function decrypt(string $encryptedText, string $key, string $iv): string
    {
        return openssl_decrypt(base64_decode($encryptedText), static::CIPHER, $key, OPENSSL_RAW_DATA, $iv);
    }
}

$text = '8SViI0Gz4r-p7A15YxkwjOBFuW*@NTtbm{U]D&E=~6yLM+adX'P;h3$,KJ%/eo>}<Rs:2#gZ.9fqn"Cv_^[(H\c!)?`Ql';
$key = 'secretkey';
$iv = AES256Encryption::generateIv();
$encryptedText = AES256Encryption::encrypt($text, $key, $iv);
$decryptedText = AES256Encryption::decrypt($encryptedText, $key, $iv);

printf('Original Text: %s%s', $text, PHP_EOL);
printf('Encrypted: %s%s', $encryptedText, PHP_EOL);
printf('Decrypted: %s%s', $decryptedText, PHP_EOL);

فيسبوك تعمل بمبدأ Token وهي عبارة عن سلسلة نصية  طويلة و فريدة يتم إرسالها للمستخدم بعد التحقق منه و تسجيله الدخولن ويقوم بتضمينها مع كل طلبية من المخدم، وكما تعلم أن لدى Facebook مساحة تخزين ضخمة، أي يمكنكهم تخزين ما يريدون.

على كل حال يمكنك تعديل مدة الجلسة الافتراضية من ملف php.ini

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

  • 0
بتاريخ 5 دقائق مضت قال Wael Aljamal:

key

لم افهم هذا الكود طويل جدا كيف يعمل 

اغلب الاستضافات لاتسمح بدخول ملف php تبع الاعدادات 

 

لذلك لازم نتعلم كيف نعمل كوكيز امنه 

انا جربت استخراج كويز اتعملت بالجافا سكربت بلغة php فلم تفلح في جلبها

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

  • 0
بتاريخ 11 دقائق مضت قال علي الكاسر:

لم افهم هذا الكود طويل جدا كيف يعمل 

هذا صنف PHP استخدم الدالتين (التشفير و فك التشفير) كمثال في آخر سطر..

$encryptedText = AES256Encryption::encrypt($text, $key, $iv);
$decryptedText = AES256Encryption::decrypt($encryptedText, $key, $iv);

key مو مفتاح التشفير أنت تختاره، باقِ الكود لايحتاج لتعديل

  • encrypt تقوم بتشفير أول وسيط لها text وناتجها هو السلسلسة النصية encryptedText أي النص المشفر.
  • decrypt دالة فك التشفير، تستقبل نص مشفر وتعيد النص بدون تشفير

 

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

  • 0
بتاريخ منذ ساعة مضت قال Wael Aljamal:

printf('Original Text: %s%s', $text, PHP_EOL); printf('Encrypted: %s%s', $encryptedText, PHP_EOL); printf('Decrypted: %s%s', $decryptedText, PHP_EOL);

وهذا لم افهمه 

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

  • 0
بتاريخ 3 ساعات قال علي الكاسر:

وهذا لم افهمه 

هذا تجريب للبرنامج، طباعة المتغيرات التي أنشاها.

  • printf هو دالة الطباعة
  • أول وسيط يحوي على نص مع %s التي يتم استبدالها بأول وسيط على الترتيب وهو المتغير text$
  • الوسيط الثالث هو PHP_EOL  ثابت لبطاعة سطر جديد end of line ثم وضعها بدل s% الثانية
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 4 دقائق مضت قال Wael Aljamal:

هذا تجريب للبرنامج، طباعة المتغيرات التي أنشاها.

  • printf هو دالة الطباعة
  • أول وسيط يحوي على %s يتم استبدالها بأول وسيط على الترتيب وهو المتغير 
  • الوسيط الثالث هو PHP_EOL  ثابت لبطاعة سطر جديد end of line

الامر يبدو معقد لو فيه مقالات تشرح هذا الشي اتمنى ترسل روابط 

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

  • 0
بتاريخ 3 ساعات قال علي الكاسر:

الامر يبدو معقد لو فيه مقالات تشرح هذا الشي اتمنى ترسل روابط 

لن تحتاج لفهمه، فقط دالتي التشفير و فك التشفير.

الأولى تعيد نص مشفر و الثانية تفك تشفيره، حيث تخزن عنصر cookies مشفر و عند قراءته تفك تشفيره لتستطيع التعامل معه.

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

  • 0
بتاريخ On ١٦‏/٦‏/٢٠٢١ at 00:33 قال Wael Aljamal:

تحتاج لفهمه، فقط دالتي التشفير و فك التشفير.

الأولى تعيد نص مشفر و الثانية تفك تشفيره، حيث تخزن عنصر cookies مشفر و عند قراءته تفك تشفيره لتستطيع التعامل معه.

اخي جربت نظام التشفير هذا ولكن لم افهم ما الفائدة المرجوة منه عندما اقوم بتشفير نص واخزنه في جلسه واقوم في صفحه اخرى بفك الشفره فلا يظهر النص الحقيقي ولا حتى الشفره، 

فقط ينجح حين اشفر نص وافك التشفير في نفس الصفحه عدا ذلك لاينفع، ماهي المشكله بالضبط

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

  • 0
بتاريخ الآن قال علي الكاسر:

اخي جربت نظام التشفير هذا ولكن لم افهم ما الفائدة المرجوة منه عندما اقوم بتشفير نص واخزنه في جلسه واقوم في صفحه اخرى بفك الشفره فلا يظهر النص الحقيقي ولا حتى الشفره، 

لا يوجد داع لتشفير البيانات في الجلسة، إنما أرفقته لأنك تريد استعمال cookies، كانت الملاحظة أن الجلسة أمنة أما ملفات الارتباط كلا، لذلك أرشدتك لطريقة تشفيرها.

لكي ينجح التشفير هتين القيمتين يجب أن تكونا ثابتتين خلال عمل البرنامج:

$key = 'secretkey';
$iv = AES256Encryption::generateIv();

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

القيمة المتغيرة هي النص في المتغير $text 

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

  • 0
بتاريخ منذ ساعة مضت قال Wael Aljamal:

يوجد داع لتشفير البيانات في الجلسة، إنما أرفقته لأنك تريد استعمال cookies، كانت الملاحظة أن الجلسة أمنة أما ملفات الارتباط كلا، لذلك أرشدتك لطريقة تشفيرها.

لكي ينجح التشفير هتين القيمتين يجب أن تكونا ثابتتين خلال عمل البرنامج:


$key = 'secretkey';
$iv = AES256Encryption::generateIv();

انا جربت هذا ولم يشتغل وهذه هي الاكواد 

الصفحة ١

<?php
session_start( ) ;

class AES256Encryption
{
    public const BLOCK_SIZE = 8;
    public const IV_LENGTH = 16;
    public const CIPHER = 'AES256';

    public static function generateIv(bool $allowLessSecure = false): string
    {
        $success = false;
        $random = openssl_random_pseudo_bytes(openssl_cipher_iv_length(static::CIPHER));
        if (!$success) {
            if (function_exists('sodium_randombytes_random16')) {
                $random = sodium_randombytes_random16();
            } else {
                try {
                    $random = random_bytes(static::IV_LENGTH);
                }
                catch (Exception $e) {
                    if ($allowLessSecure) {
                        $permitted_chars = implode(
                            '',
                            array_merge(
                                range('A', 'z'),
                                range(0, 9),
                                str_split('~!@#$%&*()-=+{};:"<>,.?/\'')
                            )
                        );
                        $random = '';
                        for ($i = 0; $i < static::IV_LENGTH; $i++) {
                            $random .= $permitted_chars[mt_rand(0, (static::IV_LENGTH) - 1)];
                        }
                    }
                    else {
                        throw new RuntimeException('Unable to generate initialization vector (IV)');
                    }
                }
            }
        }
        return $random;
    }

    protected static function getPaddedText(string $plainText): string
    {
        $stringLength = strlen($plainText);
        if ($stringLength % static::BLOCK_SIZE) {
            $plainText = str_pad($plainText, $stringLength + static::BLOCK_SIZE - $stringLength % static::BLOCK_SIZE, "\0");
        }
        return $plainText;
    }

    public static function encrypt(string $plainText, string $key, string $iv): string
    {
        $plainText = static::getPaddedText($plainText);
        return base64_encode(openssl_encrypt($plainText, static::CIPHER, $key, OPENSSL_RAW_DATA, $iv));
    }

    public static function decrypt(string $encryptedText, string $key, string $iv): string
    {
        return openssl_decrypt(base64_decode($encryptedText), static::CIPHER, $key, OPENSSL_RAW_DATA, $iv);
    }
}
$text = 'ali';
$key = 'secretkey';
$iv = AES256Encryption::generateIv();
$encryptedText = AES256Encryption::encrypt($text, $key, $iv);
$_SESSION['id_userf'] = $encryptedText;
echo $encryptedText.'<br>';

 

 

صفحة ٢

 

<?php
session_start( ) ;

class AES256Encryption
{
    public const BLOCK_SIZE = 8;
    public const IV_LENGTH = 16;
    public const CIPHER = 'AES256';

    public static function generateIv(bool $allowLessSecure = false): string
    {
        $success = false;
        $random = openssl_random_pseudo_bytes(openssl_cipher_iv_length(static::CIPHER));
        if (!$success) {
            if (function_exists('sodium_randombytes_random16')) {
                $random = sodium_randombytes_random16();
            } else {
                try {
                    $random = random_bytes(static::IV_LENGTH);
                }
                catch (Exception $e) {
                    if ($allowLessSecure) {
                        $permitted_chars = implode(
                            '',
                            array_merge(
                                range('A', 'z'),
                                range(0, 9),
                                str_split('~!@#$%&*()-=+{};:"<>,.?/\'')
                            )
                        );
                        $random = '';
                        for ($i = 0; $i < static::IV_LENGTH; $i++) {
                            $random .= $permitted_chars[mt_rand(0, (static::IV_LENGTH) - 1)];
                        }
                    }
                    else {
                        throw new RuntimeException('Unable to generate initialization vector (IV)');
                    }
                }
            }
        }
        return $random;
    }

    protected static function getPaddedText(string $plainText): string
    {
        $stringLength = strlen($plainText);
        if ($stringLength % static::BLOCK_SIZE) {
            $plainText = str_pad($plainText, $stringLength + static::BLOCK_SIZE - $stringLength % static::BLOCK_SIZE, "\0");
        }
        return $plainText;
    }

    public static function encrypt(string $plainText, string $key, string $iv): string
    {
        $plainText = static::getPaddedText($plainText);
        return base64_encode(openssl_encrypt($plainText, static::CIPHER, $key, OPENSSL_RAW_DATA, $iv));
    }

    public static function decrypt(string $encryptedText, string $key, string $iv): string
    {
        return openssl_decrypt(base64_decode($encryptedText), static::CIPHER, $key, OPENSSL_RAW_DATA, $iv);
    }
}

$key = 'secretkey';
$iv = AES256Encryption::generateIv();
$decryptedText = AES256Encryption::decrypt($_SESSION['id_userf'], $key, $iv);
echo $decryptedText;

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

  • 0
بتاريخ 8 دقائق مضت قال علي الكاسر:

انا جربت هذا ولم يشتغل وهذه هي الاكواد 

اترك صنف التشفير في ملف منفصل واستدعي دواله بعد تضمينه، لا تقم بتكراره

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

  • 0
بتاريخ 6 ساعات قال Wael Aljamal:

اترك صنف التشفير في ملف منفصل واستدعي دواله بعد تضمينه، لا تقم بتكراره

يا اخي انا عارف هالشي ولكن عندما اشفر نص في صفحه واخزنها في حلسه او كوكيز واحاول فك شفرتها في صفحه اخرى تعيد لي الدالة قيمة فارغه لماذا 

صفحة ١

<?php
session_start( ) ;
include("php/class/tshfeer.php");

$text = 'ali';
$key = 'secretkey';
$iv = AES256Encryption::generateIv();
$encryptedText = AES256Encryption::encrypt($text, $key, $iv);
$_SESSION['id_userf'] = $encryptedText;
echo $encryptedText.'<br>';

 

صفحة ٢

<?php
session_start( ) ;
include("php/class/tshfeer.php");
$key = 'secretkey';
$iv = AES256Encryption::generateIv();
$decryptedText = AES256Encryption::decrypt($_SESSION['id_userf'], $key, $iv);
echo $decryptedText;

 

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

  • 0
بتاريخ 22 ساعات قال Wael Aljamal:

اترك صنف التشفير في ملف منفصل واستدعي دواله بعد تضمينه، لا تقم بتكراره

يا اخي كود التشفير الذي ارسلته لايقوم بفك الشفره يا اخي رد ماذا افعل

والله وتالله يا اخي لا يفك الشفره الا اذا عملت شفره وعملت فك لها في نفس الصفحه 

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

  • 0
بتاريخ 17 ساعات قال علي الكاسر:

والله وتالله يا اخي لا يفك الشفره الا اذا عملت شفره وعملت فك لها في نفس الصفحه 

بالنسبة للقيمة:

$iv = AES256Encryption::generateIv();

أرجو الاحتفاظ بقيمة ثابتة منها، يمكن تشكيلها بطباعة قيمةتها باستعمال echo مثلا ثم وضعها بشكل مباشرة ضمن الكود

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...