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

السؤال

نشر (معدل)

السلام عليكم 

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

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

تم التعديل في بواسطة Wael Aljamal
توضيح السؤال

Recommended Posts

  • 0
نشر

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

  • معلومات الجلسة آمنة أكثر
  بتاريخ On 15‏/6‏/2021 at 14:05 قال علي الكاسر:

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

أظهر المزيد  

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

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

 

  • 0
نشر
  بتاريخ On 15‏/6‏/2021 at 16:17 قال علي الكاسر:

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

أظهر المزيد  

لكي تصبح 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
نشر
  بتاريخ On 15‏/6‏/2021 at 16:29 قال Wael Aljamal:

key

أظهر المزيد  

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

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

 

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

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

  • 0
نشر
  بتاريخ On 15‏/6‏/2021 at 16:37 قال علي الكاسر:

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

أظهر المزيد  

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

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

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

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

 

  • 0
نشر
  بتاريخ On 15‏/6‏/2021 at 17:41 قال علي الكاسر:

وهذا لم افهمه 

أظهر المزيد  

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

  • printf هو دالة الطباعة
  • أول وسيط يحوي على نص مع %s التي يتم استبدالها بأول وسيط على الترتيب وهو المتغير text$
  • الوسيط الثالث هو PHP_EOL  ثابت لبطاعة سطر جديد end of line ثم وضعها بدل s% الثانية
  • 0
نشر
  بتاريخ On 15‏/6‏/2021 at 17:56 قال Wael Aljamal:

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

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

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

  • 0
نشر
  بتاريخ On 15‏/6‏/2021 at 18:02 قال علي الكاسر:

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

أظهر المزيد  

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

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

  • 0
نشر
  بتاريخ On 15‏/6‏/2021 at 21:33 قال Wael Aljamal:

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

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

أظهر المزيد  

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

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

  • 0
نشر
  بتاريخ On 17‏/6‏/2021 at 17:55 قال علي الكاسر:

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

أظهر المزيد  

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

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

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

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

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

  • 0
نشر
  بتاريخ On 17‏/6‏/2021 at 17:59 قال 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
نشر
  بتاريخ On 17‏/6‏/2021 at 19:41 قال 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
نشر
  بتاريخ On 17‏/6‏/2021 at 19:41 قال Wael Aljamal:

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

أظهر المزيد  

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

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

  • 0
نشر
  بتاريخ On 18‏/6‏/2021 at 18:32 قال علي الكاسر:

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

أظهر المزيد  

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

$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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...