"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > PHP الترميز الآمن: لا تدع الكود يفلت من أيدينا

PHP الترميز الآمن: لا تدع الكود يفلت من أيدينا

تم النشر بتاريخ 2024-08-20
تصفح:524

كنت أجري محادثة غير رسمية في ذلك اليوم مع صديق يعمل في مجال التكنولوجيا في شركة ناشئة ناجحة، وبينما كنا نشاهد المباراة النهائية لكرة الماء للسيدات في الألعاب الأولمبية، بدأنا نتحدث عن فشل PHP الذي وجدته في البرية ؟. نظرًا لكونه قائدًا تقنيًا وأنا في منتصف التطوير، كنت أتوقع منه أن يعالج هذا الفشل بالفعل في حياته اليومية، ولكن حسنًا... من المفاجئ أنه يبدو أنه لم يفعل ذلك.
إن "الفشل" الذي أتحدث عنه، وربما تكون قد خمنته بالفعل، ليس سوى مقارنة فضفاضة لـ PHP. الآن، لكي أكون منصفًا، لا يمكنني أن أسميها فشلًا كبيرًا، ولكنها ميزة، لكن استخدامها يمكن أن يكون خطيرًا جدًا، وبهذا المعنى، فهو فشل! هيا بنا نتعرف على الطالب الذي يذاكر كثيرا!

PHP Secure Coding: Don

جدول المحتويات

  • مقارنة PHP فضفاضة
  • سيناريوهات الضعف
    • نظام تسجيل الدخول غير الآمن
    • التفويض غير الآمن مع لمسة
  • التخفيف من خطأ المقارنة غير الواضحة
  • خاتمة
  • أظهر الحب @Sudorealm

PHP مقارنة فضفاضة

المقارنة الفضفاضة في PHP هي عندما تقارن قيمتين باستخدام عامل التشغيل ==، والذي لا يتحقق من أنواع بيانات المتغيرات الجاري مقارنتها. سيحاول PHP تحويل القيم إلى نوع شائع قبل مقارنتها.

if ('string' == true){
 echo 'Weedle I choose you';
}
else{
 echo 'Charizard I choose you';
}

صدق أو لا تصدق، نحن على وشك إرسال Weedle من 3 مستويات إلى المعركة هنا، بينما يظل Charizard الخاص بنا غير مستخدم. لماذا؟ حسنًا، في المثال أعلاه، تقوم PHP بتحويل السلسلة "string" إلى true قبل مقارنتها بـ true، مما يؤدي إلى مقارنة حقيقية؟. هذا السلوك، رغم أنه مفيد في بعض الأحيان، إلا أنه قد يكون خطيرًا إذا لم يتم فهمه والسيطرة عليه بشكل صحيح.

راجع جدول المقارنات الفضفاضة هذا من مستندات PHP لمزيد من المعلومات

قد لا يبدو الأمر كثيرًا في البداية، لكن ثق بي في أعين المطورين المدربين، قد ترسل هذه الخدعة فجأة ارتعاشًا إلى عظامهم وترسلهم إلى فورة إعادة بناء كود الإنتاج.

السيناريوهات الضعيفة

في هذا القسم من المقالة، سأحاول تقديم بعض كتل التعليمات البرمجية التي عند العثور عليها في البرية يمكن أن تمنحك مكافأة كبيرة على الأخطاء، وأيضًا إذا وجدت أي شيء مشابه عن بعد لقاعدة التعليمات البرمجية الخاصة بك... قم بتغييره ?

نظام تسجيل الدخول غير الآمن

في المقتطف أدناه، ترى منطق نظام تسجيل الدخول الأساسي للغاية.

$username = $_POST['username'];
$password = $_POST['password'];

if ($username == 'admin' && $password == '12345') {
    // Grant access
}

لنفترض أن أحد المتسللين الماكرين يعبث بالبيانات المرسلة ويجعلها: $_POST['username'] = true و $_POST['password'] = true مما سيؤدي إلى:

$username = $_POST['username'];
$password = $_POST['password'];

if (true == 'admin' && true == '12345') {
    // Grant access
}

# Now that hacker has been granted access to our App... Good for him, not for us

إذا كنت تتساءل كيف يمكن للمتسلل التلاعب ببياناتنا، فلدي إجابتين لك من أعلى رأسي:

  1. طلب مخصص مع الضفيرة.
  2. البربسويت

المضي قدما.

إذن غير آمن مع تطور

هنا أعرض مشكلة في PHP قد تصدمك.

$user_role = $_POST['user_role']; // Example: 'admin', 'editor', 'viewer'

// Authorization check using a switch statement
switch ($user_role) {
    case 'crazyDifficultAdminRoleNooneWouldEverGuess':
        // Admin privileges
        echo "Access granted: Super Admin level";
        break;

    case 'editor':
        // Editor privileges
        echo "Access granted: Editor level";
        break;

    case 'viewer':
        // Viewer privileges
        echo "Access granted: Viewer level";
        break;

    default:
        // No access
        echo "Access denied: Invalid role";
        break;
}

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

ولكن ماذا لو لم يكن عليهم التخمين على الإطلاق؟☠️

هل تعلم أن Switch Case يستخدم مقارنة فضفاضة؟ ها! قد تصاب بالصدمة الآن!
هذا يعني أنه إذا أضاف المتسلل $_POST['user_role'] = true، فسوف يصل إلى الحالة الأولى في بيان التبديل الخاص بنا بغض النظر عن القيمة. أليس هذا الألم في القاع؟ اقرأ المستندات.

التخفيف من خطأ المقارنة الفضفاضة

يعد التخفيف من خطأ المقارنة غير الدقيق أمرًا بالغ الأهمية لضمان أمان وموثوقية تطبيقات PHP الخاصة بك. يلعب استخدام المقارنة الصارمة === وتعبير المطابقة، في إصدارات PHP 8.0، دورًا حيويًا في هذه العملية. على عكس عامل المقارنة الفضفاض ==، الذي يمكن أن يؤدي إلى نتائج غير متوقعة وربما خطيرة بسبب تلاعب النوع في PHP، تضمن المقارنة الصارمة التحقق من قيمة ونوع المتغيرات. يؤدي هذا إلى التخلص من نقاط الضعف مثل الإكراه غير المقصود، والذي يمكن استغلاله لتجاوز عمليات التحقق الأمني.

إليك حل لخطأ التفويض غير الآمن باستخدام تعبير المطابقة:

$user_role = $_POST['role'];

$response = match ($user_role) {
    'crazyDifficultAdminRoleNooneWouldEverGuess' => "Access granted: Super Admin level",
    'editor' => "Access granted: Editor level",
    'viewer' => "Access granted: Viewer level",
    default => "Access denied: Invalid role",
};

echo $response; # This outputs: 'Access denied: Invalid role' when role is set to true

خاتمة

هل تعلم عن مخاطر المقارنة الفضفاضة والتلاعب بالكتابة في PHP؟ إذا لم تفعل ذلك، فأنت تفعل الآن. دع هذه المقالة البسيطة بمثابة تذكير لقراءة الوثائق دائمًا وتطوير فهم قوي لكل ما تستخدمه عند البرمجة. الفضول هو المفتاح عندما تسعى جاهدة لتصبح الأفضل في كل ما تفعله!

من خلال تبني الانضباط الصارم لـ === والدقة الفائقة للمطابقة، يمكنك الاحتفاظ بكود PHP الخاص بك تحت قيود مشددة، مما يضمن أنه يعمل تمامًا كما تتوقع. تذكر أن القليل من الصرامة الآن يمكن أن يوفر عليك الكثير من الصداع لاحقًا. اجعل هذا بمثابة تنبيه مرح أنه بغض النظر عن مكان وجودك في رحلة البرمجة، فهناك دائمًا شيء جديد لتتعلمه. لذا، أبقِ أعينك مفتوحة، وابقَ فضوليًا، ولا تدع تلك المقارنات السائبة تفلت من الشبكة! ?

ْعَنِّي

يمكنك معرفة المزيد عني في مساحة مدونتي الشخصية على sudorealm.com.

إذا أعجبك أسلوبي في الكتابة والمحتوى الخاص بي، فلا تتردد في الضغط على زر المتابعة، وستحدث أشياء سحرية! ؟؟

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/athanstan/php-secure-coding-dont-let-the-code-get-loose-26ja?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3