هل CakePHP هو الحل؟

كنت أتحدث مع أحد الأصدقاء – علي – عن المواقع الإلكترونية التي قمنا ببرمجتها بإستخدام لغة الـ PHP، فعدد من المواقع التي عملنها بالـ PHP تأخرت في التسليم أو أنها لم ترى النور، وكان حديثنا عن أسباب عدم إكتمالها أو تأخرها، بالطبع كنا نقارنها بالمواقع التي عملنها بـالـ ASP.Net، فالمواقع التي نعملها بالـ ASP.Net غالباً ما تنتهي بسرعة أكبر، وبسهولة نسبية. فإتفقنا بأن السبب الرئيسي وراء ذلك هو التسهيلات الموجود في ASP.Net من خلال بيئة التطوير (IDE) وهي MS Visual Studio 2005,2008 وذلك حيث توجد القوالب الجاهزة للتعامل مع قواعد البيانات، وأيضاً الإبعاد بقدر الإمكان بين البرمجة (Business logic) والعرض (GUI)، بالمقابل كنا نستخدم للـ PHP الإسلوب الإعتيادي للبرمجة (دون أدوات جاهزة للتعامل مع قواعد البيانات) أيضاً شفرات الـ PHP، وHTML، وJavaScript كلها متواجدة في نفس الصفحة بإسلوب متعب للتطوير والتصحيح.مما جعلني أبحث عن أساليب أفضل للبرمجة بإستخدام لغة الـ PHP، لفت إنتباهي أحد إطارات العمل وهو CakePHP إذ هو إطار عمل مفتوح المصدر لتطوير للمواقع الإلكترونية (Web Application Framework) بإستخدام لغة الـ PHP.

CakePHP لدية العديد من الخواص التي أعجبتني والتي تجعل منه أحد الخيارات الجيدة، ومنها:
  1. مفتوح المصدر، تحت رخصة MIT.
  2. متوافق مع PHP 4 و5.
  3. إستخدام تركيبة الـ Model-view-controller وهي بإختصار تهدف إلى فصل المركبات الثلاث للبرامج (العرض، والتحكم، والبيانات)، للمزيد من المعلومات.
  4. العمليات الأساسية لتخاطب مع قواعد البيانات (CRUD) مبنية على شكل كائنات (ORM).
  5. Scaffolding وهو تركيبة جاهزة لعمل موقع من خلال قاعدة بيانات، فبمجرد عمل قواعد البيانات يكمن عمل موقع متكامل – من حيث التعامل من القواعد بيانات (CRUD) – (هذا ليس بغريب لمبرمجي Ruby on Rails).
  6. العناوين في CakePHP يمكل تخصيصها حسب رغبتك، وفي الأساس يكون كالآتي http://www.mysite.com/shop/buy/item3 سيقوم البرنامج الخاص بالتوجيه (Router) بمناداة الدالة buy() الموجودة في صنف (class) ShopController، وإعطاء الدالة buy(item3).
  7. قلة الإعدادات التي يجب عملها على خادم الويب Apache Web Server.
  8. وجود فريق عمل جيد لتعديل الأخطاء وتطوير CakePHP، ولدعم.
  9. أيضاً دعم لكثير من الإحتياجات للمبرمج مثل تسهلات للـ Ajax، وHTML، وForms، هذا وأيضاً توفر العديد من الأمور فيما يتعلق بالحماية.


هذا جعلني أرى أن بإستخدام CakePHP يمكن عمل مواقع إلكترونية في وقت قصير، وتكون هذه المواقع قابلة للتطوير والتوسع (وذلك بسبب الـ Modularity). ولكن لا زلت أرى أن هذا العمل الجبار إذا ما أرفق ببيئة تطويرية (IDE) جيدة فإنه سوف يحدث تغيراً كبيراُ في مجال البرمجة في الويب، وذلك لأن هنا العديد من المبرمجين للغة الـ PHP، فما بالك إذا تم تسهيل عمل هاؤلاء.
Read More

الثغرات الشائعة في PHP

المتغيرات العامة و ثغرات التضمين

يشكك البعض في نمط الحماية الذي يحيط بمترجم PHP, والحقيقة فإن نمط الحماية الذي يحيط بمترجم PHP لا يقل كفاءة عن عن مترجم Microsoft ممثلا في حزمة IIS , فكما نعلم إن PHP لغة مفتوحة المصدر يساهم في تطويرها مجموعة عمل كبيرة من كل النواحي ومع هذا يظل هنالك مجموعة من الثغرات التي لا يمكن أن نصفها بأنها تكونت نتيجة خطأ داخلي بالمترجم بل هي نتيجة قصور برمجي يتسبب فيه المبرمج.

تحتل المتغيرات variables مساحة شاسعة من أرضية الأخطاء البرمجية الشائعة , وخصوصا عندما تكون ميزة الـ Register Global متاحة , وهي ميزة لا غنى عنها , ويكثر استخدامها في مختلف التطبيقات العالمية وفكرتها هي ارسال متغيرات من صفحة لأخرى عبر URL مثلا: www.example.com/index.php?id=1.

ويتضح الخطر عندما نقوم بارسال بيانات سرية مثل كلمة المرور أو معلومات الاتصال بقواعد البيانات أو ما شابه التي كانت بالأحرى أن ترسل عن طريق الـ Post مثلا واحيانا اخرى يقوم المستخدم المتطفل بتغيير قيمة متغير معين من خلال الـ URL.

ثغرة أخرى شائعة بالPHP وهي File Include , وتظهر عندما يلجأ المبرمج إلى استخدام متغير معين ليقوم باختزان اسم الملف المطلوب للقيام بعملية Include أو تضمين للملف وتزيد خطورة عندما يقوم المستخدم بتضمين اسم الملف على متغير عام يظهر في URL وبالتالي يتمكن المستخدم العادي من تغيير مسار الملف إلى مسار ملف داخلي مثلا يحتوي على معلومات حساسة مثل كلمات المرور وغيرها ..

Read More